入力する
[*] 111, 22, 33, 44
出力
111,22,33,44
sed
コマンドを使用すると、出力sed 's/^\[\*\][[:space:]]*//' file
が表示されることがあります。111, 22, 33, 44
これはスペースがまだ残っていることを意味します。
もしそうなら、正しいコマンドは何ですかsed
?
ベストアンサー1
短い答えは、これが望むことをする必要があるということです。
sed 's/[][*]\|[[:space:]]//g'
次のようにテストしてみてください。
echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'
出力:
111,22,33,44
より詳細な説明は以下の通りである。
表現に欠けている重要な要素は、次のものを使用することです。g
コマンドグローバル交換を実行します。このコマンドがないと、各行の最初の項目のみが置き換えられます。
私の解決策の中で最も直観に反する部分は(私の意見では)文字クラスに角かっこを含める方法です。そのためには、以下を参照してください。sed マニュアル:
‘]’ ends the bracket expression if it’s not the first list item. So, if you want to make the ‘]’ character a list item, you must put it first.
このトピックの詳細については、SeverFault の次の投稿をご覧ください。
あるいは、式を別のsed
コマンドに渡すこともできます。たとえば、次のようになります。
echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'