teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

回答にバグがあったので追記修正

2017/10/28 08:36

投稿

dodox86
dodox86

スコア9380

answer CHANGED
@@ -8,7 +8,7 @@
8
8
  LINE3
9
9
  LINE4
10
10
 
11
- $ sed -e 's/^[[:space:]]*//g' content.txt
11
+ $ sed -e 's/^[[:space:]][[:space:]]*//g' content.txt
12
12
  LINE1
13
13
  LINE2
14
14
  LINE3
@@ -16,12 +16,39 @@
16
16
  ```
17
17
  となります。
18
18
 
19
+ **追記** 私の先の回答にバグがあったので修正させていただきました。
20
+
19
- **追記** 置換したいのであれば、例えば"PREFIX-"に置換するとして、
21
+ 置換したいのであれば、例えば"PREFIX-"に置換するとして、
20
22
  ```
21
- $ sed -e 's/^[[:space:]]*/PREFIX-/g' content.txt
23
+ $ sed -e 's/^[[:space:]][[:space:]]*/PREFIX-/g' content.txt
22
24
  PREFIX-LINE1
23
25
  PREFIX-LINE2
24
- PREFIX-LINE3
26
+ LINE3
25
27
  PREFIX-LINE4
26
28
  ```
27
- となります。
29
+ となります。
30
+ 元のテキストファイルがUTF-8だとして、スペースは20h, 全角のスペースだと e3h 80h 80hのシーケンスになるかと思うのですが、私のmac osxのターミナル環境下(LANG=ja_JP.UTF-8)ですとUTF-8全角スペースでもsedの[[:space::]]メタ文字指定で除去できてしまいましたね。
31
+ ```Bash
32
+ bash-3.2$ file content.txt
33
+ content.txt: UTF-8 Unicode text
34
+ bash-3.2$ cat content.txt
35
+ LINE1
36
+ LINE2
37
+ LINE3
38
+  LINE4
39
+      LINE5
40
+
41
+ bash-3.2$ od -t xC content.txt
42
+ 0000000 20 4c 49 4e 45 31 0a 20 20 4c 49 4e 45 32 0a 4c
43
+ 0000020 49 4e 45 33 0a 20 e3 80 80 4c 49 4e 45 34 0a e3
44
+ 0000040 80 80 e3 80 80 e3 80 80 e3 80 80 20 20 4c 49 4e
45
+ 0000060 45 35 0a 0a
46
+ 0000064
47
+ bash-3.2$ sed -e 's/^[[:space:]][[:space:]]*/PREFIX-/g' content.txt
48
+ PREFIX-LINE1
49
+ PREFIX-LINE2
50
+ LINE3
51
+ PREFIX-LINE4
52
+ PREFIX-LINE5
53
+ ```
54
+ 他の回答者様が暗にご指摘になっているように、行頭の空白文字の種類として何が入っているか、が問題ですね。

1

置換について追記

2017/10/28 08:36

投稿

dodox86
dodox86

スコア9380

answer CHANGED
@@ -13,7 +13,15 @@
13
13
  LINE2
14
14
  LINE3
15
15
  LINE4
16
+ ```
17
+ となります。
16
18
 
17
-
19
+ **追記** 置換したいのであれば、例えば"PREFIX-"に置換するとして、
18
20
  ```
21
+ $ sed -e 's/^[[:space:]]*/PREFIX-/g' content.txt
22
+ PREFIX-LINE1
23
+ PREFIX-LINE2
24
+ PREFIX-LINE3
25
+ PREFIX-LINE4
26
+ ```
19
27
  となります。