交换句子中的第一个和第三个单词(sed)

时间:2016-04-11 23:27:22

标签: shell sed

我想使用sed替换句子中的第一个和第三个单词。

我的代码看起来像这样:

sed 's/\^ \([a-zA-Z]\*\) \(\^[a-zA-Z]\)  \([a-zA-Z]\*\) \(\^[a-zA-Z]\) \([a-zA-Z]\*\) \(.\*\) / \5 \2 \3 \4 \1 \6 /g' $1

单词仅包含小写和大写字符。不是a-z A-Z的字符是分隔符。我的代码什么也没做:)

3 个答案:

答案 0 :(得分:0)

不要逃避*字符:

sed 's/^\([a-zA-Z]*\)\([^a-zA-Z]\)\([a-zA-Z]*\)\([^a-zA-Z]\)\([a-zA-Z]*\)\(.*\) /\5\2\3\4\1\6/g' $1

此外,您不需要重新组合之间的空格。

答案 1 :(得分:0)

#!/bin/sh
echo "wordone wordtwo wordthree wordfour wordfive" \
| sed -Ee 's/^([[:alpha:]]+) ([[:alpha:]]+) ([[:alpha:]]+)/\3 \2 \1/'

答案 2 :(得分:0)

Try this:

$ sed -r 's/^([a-zA-Z]*)([^a-zA-Z]+[a-zA-Z]+[^a-zA-Z]+)([a-zA-Z]*)(.*)/\3\2\1\4/' infile

Example #1

$ line="one two three four five"
$ echo "$line" | sed -r 's/^([a-zA-Z]*)([^a-zA-Z]+[a-zA-Z]+[^a-zA-Z]+)([a-zA-Z]*)(.*)/\3\2\1\4/'

Output:

three two one four five

Example #2

$ line="one,two,three,four,five"
$ echo "$line" | sed -r 's/^([a-zA-Z]*)([^a-zA-Z]+[a-zA-Z]+[^a-zA-Z]+)([a-zA-Z]*)(.*)/\3\2\1\4/'

Output:

three,two,one,four,five