回答編集履歴

3

誤記修正

2017/11/12 02:56

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -226,7 +226,7 @@
226
226
 
227
227
 
228
228
 
229
- bash-3.2$ sed -e "s/['&;(,),\"]//g" data2.txt
229
+ bash-3.2$ sed -e "s/['&;(,)\"]//g" data2.txt
230
230
 
231
231
  TIS
232
232
 

2

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

2017/11/12 02:55

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -60,6 +60,204 @@
60
60
 
61
61
 
62
62
 
63
-
64
-
65
- ```
63
+ ```
64
+
65
+ ---
66
+
67
+ **追記 - perl5 での代替策の提案**
68
+
69
+ macOS のターミナルでは`perl`(perl5)も使えるので、こちらの方が簡単かもしれません。sedの代わりとして`awk`も選択肢のひとつですが、perlの方が正規表現を含めて強力です。
70
+
71
+
72
+
73
+ 以下は、\W (単語構成文字(「a~z」「A~Z」「0~9」 アンダーバー「_」))以外を除去するperl5でのワンライナーでのmacOSターミナルでの実行結果です。
74
+
75
+
76
+
77
+ ```Bash
78
+
79
+ $ perl -ne 's/\W//g;print $_ . "\n"' data.txt
80
+
81
+ TIS
82
+
83
+ TIS
84
+
85
+ TWERE
86
+
87
+ TWERE
88
+
89
+ AMP
90
+
91
+ AMP
92
+
93
+ AMP
94
+
95
+ A
96
+
97
+ AND
98
+
99
+ AND
100
+
101
+ AGAIN
102
+
103
+
104
+
105
+ $
106
+
107
+ ```
108
+
109
+
110
+
111
+ コマンド部分 `'s/\W//g;print $_ . "\n"'` で、「1行ごとに」「単語構成文字以外を」「全部」「除去して」「プリントし」「最後に改行文字をプリント」します。
112
+
113
+
114
+
115
+ ---
116
+
117
+ コメントにて追加でいただいた質問と確認事項ですが、
118
+
119
+
120
+
121
+ > 自分がやった/Wでうまくいかない理由
122
+
123
+
124
+
125
+ macOSのターミナルで使えるsed は、GNU版のsedではなく、BSD版(BSDオリジナルかは分かりませんが)のもので、メタ文字の`\W`や`\w`が使えない為です。GNU版のsedであれば、質問者様のやろうとしていた`\W`が使えます。以下はCygwin上でGNU版のsed(4.4)にて実行した結果です。
126
+
127
+ ```
128
+
129
+ $ sed --version
130
+
131
+ sed (GNU sed) 4.4
132
+
133
+ Packaged by Cygwin (4.4-1)
134
+
135
+ Copyright (C) 2017 Free Software Foundation, Inc.
136
+
137
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
138
+
139
+ This is free software: you are free to change and redistribute it.
140
+
141
+ There is NO WARRANTY, to the extent permitted by law.
142
+
143
+
144
+
145
+ Written by Jay Fenlason, Tom Lord, Ken Pizzini,
146
+
147
+ and Paolo Bonzini.
148
+
149
+ GNU sed home page: <http://www.gnu.org/software/sed/>.
150
+
151
+ General help using GNU software: <http://www.gnu.org/gethelp/>.
152
+
153
+ E-mail bug reports to: <bug-sed@gnu.org>.
154
+
155
+
156
+
157
+ $ sed -e 's/\W//g' data.txt
158
+
159
+ TIS
160
+
161
+ TIS
162
+
163
+ TWERE
164
+
165
+ TWERE
166
+
167
+ AMP
168
+
169
+ AMP
170
+
171
+ AMP
172
+
173
+ A
174
+
175
+ AND
176
+
177
+ AND
178
+
179
+ AGAIN
180
+
181
+ ```
182
+
183
+
184
+
185
+ 上記を踏まえて、
186
+
187
+ > ほかにも - や ) や :などがあるのですがその場合も全部書き出してやるのがよいのでしょうか?
188
+
189
+
190
+
191
+ macOSのターミナルでBSD版sedを実行するのであれば、全部書き出す必要があります。文字によっては必要に応じてエスケープしなければならないので煩雑かと。以下は、私の最初の回答例に")" と"""(ダブルクォーテーション)を加えた例です。
192
+
193
+
194
+
195
+ ```Bash
196
+
197
+ bash-3.2$ cat data2.txt
198
+
199
+ 'TIS
200
+
201
+ 'TIS
202
+
203
+ "TIS"
204
+
205
+ ("TIS")
206
+
207
+ ((""TIS""))
208
+
209
+ 'TWERE
210
+
211
+ 'TWERE
212
+
213
+ &AMP;
214
+
215
+ &AMP;
216
+
217
+ &AMP;
218
+
219
+ (A
220
+
221
+ (AND
222
+
223
+ (AND
224
+
225
+ AGAIN,
226
+
227
+
228
+
229
+ bash-3.2$ sed -e "s/['&;(,),\"]//g" data2.txt
230
+
231
+ TIS
232
+
233
+ TIS
234
+
235
+ TIS
236
+
237
+ TIS
238
+
239
+ TIS
240
+
241
+ TWERE
242
+
243
+ TWERE
244
+
245
+ AMP
246
+
247
+ AMP
248
+
249
+ AMP
250
+
251
+ A
252
+
253
+ AND
254
+
255
+ AND
256
+
257
+ AGAIN
258
+
259
+ bash-3.2$
260
+
261
+
262
+
263
+ ```

1

記述を修正

2017/11/12 02:51

投稿

dodox86
dodox86

スコア9183

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