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

回答編集履歴

3

誤記修正

2017/11/12 02:56

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -112,7 +112,7 @@
112
112
  (AND
113
113
  AGAIN,
114
114
 
115
- bash-3.2$ sed -e "s/['&;(,),\"]//g" data2.txt
115
+ bash-3.2$ sed -e "s/['&;(,)\"]//g" data2.txt
116
116
  TIS
117
117
  TIS
118
118
  TIS

2

いただいたコメントを踏まえて追記

2017/11/12 02:55

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -29,5 +29,104 @@
29
29
  AGAIN
30
30
  bash-3.2$
31
31
 
32
+ ```
33
+ ---
34
+ **追記 - perl5 での代替策の提案**
35
+ macOS のターミナルでは`perl`(perl5)も使えるので、こちらの方が簡単かもしれません。sedの代わりとして`awk`も選択肢のひとつですが、perlの方が正規表現を含めて強力です。
32
36
 
37
+ 以下は、\W (単語構成文字(「a~z」「A~Z」「0~9」 アンダーバー「_」))以外を除去するperl5でのワンライナーでのmacOSターミナルでの実行結果です。
38
+
39
+ ```Bash
40
+ $ perl -ne 's/\W//g;print $_ . "\n"' data.txt
41
+ TIS
42
+ TIS
43
+ TWERE
44
+ TWERE
45
+ AMP
46
+ AMP
47
+ AMP
48
+ A
49
+ AND
50
+ AND
51
+ AGAIN
52
+
53
+ $
54
+ ```
55
+
56
+ コマンド部分 `'s/\W//g;print $_ . "\n"'` で、「1行ごとに」「単語構成文字以外を」「全部」「除去して」「プリントし」「最後に改行文字をプリント」します。
57
+
58
+ ---
59
+ コメントにて追加でいただいた質問と確認事項ですが、
60
+
61
+ > 自分がやった/Wでうまくいかない理由
62
+
63
+ macOSのターミナルで使えるsed は、GNU版のsedではなく、BSD版(BSDオリジナルかは分かりませんが)のもので、メタ文字の`\W`や`\w`が使えない為です。GNU版のsedであれば、質問者様のやろうとしていた`\W`が使えます。以下はCygwin上でGNU版のsed(4.4)にて実行した結果です。
64
+ ```
65
+ $ sed --version
66
+ sed (GNU sed) 4.4
67
+ Packaged by Cygwin (4.4-1)
68
+ Copyright (C) 2017 Free Software Foundation, Inc.
69
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
70
+ This is free software: you are free to change and redistribute it.
71
+ There is NO WARRANTY, to the extent permitted by law.
72
+
73
+ Written by Jay Fenlason, Tom Lord, Ken Pizzini,
74
+ and Paolo Bonzini.
75
+ GNU sed home page: <http://www.gnu.org/software/sed/>.
76
+ General help using GNU software: <http://www.gnu.org/gethelp/>.
77
+ E-mail bug reports to: <bug-sed@gnu.org>.
78
+
79
+ $ sed -e 's/\W//g' data.txt
80
+ TIS
81
+ TIS
82
+ TWERE
83
+ TWERE
84
+ AMP
85
+ AMP
86
+ AMP
87
+ A
88
+ AND
89
+ AND
90
+ AGAIN
91
+ ```
92
+
93
+ 上記を踏まえて、
94
+ > ほかにも - や ) や :などがあるのですがその場合も全部書き出してやるのがよいのでしょうか?
95
+
96
+ macOSのターミナルでBSD版sedを実行するのであれば、全部書き出す必要があります。文字によっては必要に応じてエスケープしなければならないので煩雑かと。以下は、私の最初の回答例に")" と"""(ダブルクォーテーション)を加えた例です。
97
+
98
+ ```Bash
99
+ bash-3.2$ cat data2.txt
100
+ 'TIS
101
+ 'TIS
102
+ "TIS"
103
+ ("TIS")
104
+ ((""TIS""))
105
+ 'TWERE
106
+ 'TWERE
107
+ &AMP;
108
+ &AMP;
109
+ &AMP;
110
+ (A
111
+ (AND
112
+ (AND
113
+ AGAIN,
114
+
115
+ bash-3.2$ sed -e "s/['&;(,),\"]//g" data2.txt
116
+ TIS
117
+ TIS
118
+ TIS
119
+ TIS
120
+ TIS
121
+ TWERE
122
+ TWERE
123
+ AMP
124
+ AMP
125
+ AMP
126
+ A
127
+ AND
128
+ AND
129
+ AGAIN
130
+ bash-3.2$
131
+
33
132
  ```

1

記述を修正

2017/11/12 02:51

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  sedで行けます。オプションとしては`sed -e "s/['&;(,]//g"` のように指定します。
2
- macOS Sierra 10.12.6 のターミナルでの実行結果です。以下のようになります。
2
+ macOS Sierra 10.12.6 のターミナルでの実行結果を示します。
3
3
 
4
4
  ```Bash
5
5
  bash-3.2$ cat data.txt