2017-04-11 42 views
0

我正在嘗試編寫一個shell腳本,用於將第一個單詞和第三個單詞切換成一行。在這種情況下,只有包含字母(大寫和小寫)的字符串纔算作單詞,其他所有內容(數字,標點符號,空格)都被視爲空白。 例如:Sed - 如何在一行中切換兩個單詞

abc123def. ghi...jkl 

會變成:

ghi123def. abc...jkl 

我嘗試以下,但它不工作:

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

隨着sed

$ 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-Za -z] + [^ A-ZA-Z] +)([A-ZA-Z] +)(。*)/ \ 1 \ 4 \ 3 \ 2 \ 5/g'' – user3529379

相關問題