彼ら!2 つの単語を 1 行で交換しようとしていますが、うまくいきません。例: 「今日は私の大学の最初の日です」は「私の今日は大学の最初の日です」である必要があります。
これは私が試したものです:
sed 's/\([a-zA-z0-9]*\)\([a-zA-z0-9]*\)\([a-zA-z0-9]*\)/\3\2\1/' filename.txt
私は何を間違っていますか?
sed -r 's/^(\w+)(\s+\w+\s+)(\w+)(.*)/\3\2\1\4/'
あなたの例で:
kent$ echo "Today is my first day of university"|sed -r 's/^(\w+)(\s+\w+\s+)(\w+)(.*)/\3\2\1\4/'
my is Today first day of university
あなたの問題については、 awk の方が簡単です:
awk '{t=$1;$1=$3;$3=t}1'
同じ入力:
kent$ echo "Today is my first day of university"|awk '{t=$1;$1=$3;$3=t}1'
my is Today first day of university
\s
空白文字を意味するものを作成し始めます。スペースではなくすべてに一致するすべて
の単語に一致するために使用します。
そして、単語間のスペースとの一致が必要でした。代わりにスペースを書き直すことを忘れないでください。[^\s]*
\s*
例としてこれを見てください:
sed 's#\([^ ]*\)\s+#\1 #'
(#
の代わりに使用します/
)