
入力
[*] 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'