ファイルに存在する 1 つ以上の「+」記号をスペースに置き換える正規表現を作成しようとしています。私は次のことを試しました:
echo This++++this+++is+not++done | awk '{ sub(/\++/, " "); print }'
This this+++is+not++done
期待される:
This this is not done
これがうまくいかなかった理由はありますか?
gsub
グローバル置換を行う使用:
echo This++++this+++is+not++done | awk '{gsub(/\++/," ");}1'
sub
関数は最初の一致のみを置換し、すべての一致を置換するには を使用しますgsub
。
またはtr
コマンド:
echo This++++this+++is+not++done | tr -s '+' ' '
慣用的な awk ソリューションは、入力フィールド区切り記号を出力区切り記号に変換するだけです。
$ echo This++++this+++is+not++done | awk -F'++' '{$1=$1}1'
This this is not done
これを試して
echo "This++++this+++is+not++done" | sed -re 's/(\+)+/ /g'
あなたも使うことができますsed
。
echo This++++this+++is+not++done | sed -e 's/+\{1,\}/ /g'
これは 1 つ以上に一致+
し、スペースに置き換えます。
echo "This++++this+++is+not++done" | sed 's/++*/ /g'