回答編集履歴
3
誤記修正
answer
CHANGED
@@ -112,7 +112,7 @@
|
|
112
112
|
(AND
|
113
113
|
AGAIN,
|
114
114
|
|
115
|
-
bash-3.2$ sed -e "s/['&;(,)
|
115
|
+
bash-3.2$ sed -e "s/['&;(,)\"]//g" data2.txt
|
116
116
|
TIS
|
117
117
|
TIS
|
118
118
|
TIS
|
2
いただいたコメントを踏まえて追記
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
|
+
&
|
108
|
+
&
|
109
|
+
&
|
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
記述を修正
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
|