sed は行から特殊文字とスペースを削除します。

sed は行から特殊文字とスペースを削除します。

入力する

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

おすすめ記事