23

ファイルに存在する 1 つ以上の「+」記号をスペースに置き換える正規表現を作成しようとしています。私は次のことを試しました:

 echo This++++this+++is+not++done | awk '{ sub(/\++/, " "); print }'
 This this+++is+not++done

期待される:

This this is not done

これがうまくいかなかった理由はありますか?

4

8 に答える 8

36

gsubグローバル置換を行う使用:

echo This++++this+++is+not++done | awk '{gsub(/\++/," ");}1'

sub関数は最初の一致のみを置換し、すべての一致を置換するには を使用しますgsub

于 2013-01-21T03:43:44.167 に答える
15

またはtrコマンド:

echo This++++this+++is+not++done | tr -s '+' ' '
于 2013-01-21T03:47:12.687 に答える
12

慣用的な awk ソリューションは、入力フィールド区切り記号を出力区切り記号に変換するだけです。

$ echo This++++this+++is+not++done | awk -F'++' '{$1=$1}1'
This this is not done
于 2013-01-21T14:15:57.293 に答える
7

これを試して

echo "This++++this+++is+not++done" | sed -re 's/(\+)+/ /g'

于 2013-01-21T05:12:12.850 に答える
4

あなたも使うことができますsed

echo This++++this+++is+not++done | sed -e 's/+\{1,\}/ /g'

これは 1 つ以上に一致+し、スペースに置き換えます。

于 2013-01-21T03:46:03.267 に答える
-2
echo "This++++this+++is+not++done" | sed 's/++*/ /g'
于 2015-03-25T08:40:48.600 に答える