2017-04-11 11 views
0

行の最初と3番目の単語を切り替えるシェルスクリプトを作成しようとしています。この場合、英字(大文字と小文字の両方)を含む文字列だけが単語としてカウントされ、その他のすべて(数字、句読点、空白)は空白とみなされます。たとえば :Sed - 行内の2つの単語を切り替える方法

abc123def. ghi...jkl 

がに変わるでしょう:

ghi123def. abc...jkl 

私は次のことを試してみましたが、それは動作しません:sed

sed 's/\([a-zA-Z][a-zA-Z]*\)[^A-Z^a-z]\([a-zA-Z][a-zA-Z]*\)[^A-Z^a-z]\([a-zA-Z][a-zA-Z]*\)/\3 \2 \1/' input.txt 
+0

それはsedされる必要がありますか? Awkは一般に、単語のシーケンスとして行を処理するのに適しています。 –

+0

残念ながら、はい。 – user3529379

答えて

2

を:

$ echo "abc123def. ghi...jkl" | sed -r 's/([A-Za-z]*)([^A-Za-z]*[A-Za-z]*[^A-Za-z]*)([A-Za-z]*)(.*)/\3\2\1\4/g' 
$ ghi123def. abc...jkl 
+1

ありがとう!私が必要としていたものではありませんでしたが、その行が必ずしも単語で始まるとは必ずしも明らかではなかったからです。ここでは、私が行ったバリエーションがあります: 'sed -r 's /([^ A-Za-z] *)([A-Za-z] +)([A-Za-z] + [A- (A-Za-z)+)(。*)/ \ 1 \ 4 \ 3 \ 2 \ 5/g " – user3529379

関連する問題