家伙!我试图在一行中交换两个单词,但它不起作用。例如:“今天是我大学的第一天”应该是“我今天是大学的第一天”
这就是我的尝试:
sed 's/\([a-zA-z0-9]*\)\([a-zA-z0-9]*\)\([a-zA-z0-9]*\)/\3\2\1/' filename.txt
我做错了什么?
答案 0 :(得分:1)
试试这个:
sed -rn 's/(\w+\s)(\w+\s)(\w+\s)(.*)/\3\2\1\4/p' filename.txt
-n禁止自动打印图案空间
-r在脚本中使用扩展的正则表达式
\ s用于空白
答案 1 :(得分:0)
我开始使用\s
来表示任何空格字符
我使用它来匹配[^\s]*
的每个单词,它与所有内容匹配,但不是空格
我有\s*
用于匹配单词之间的空格。并且不要忘记重写一个替代空间。
看一下这个例子:
sed 's#\([^ ]*\)\s+#\1 #'
(我使用#
代替/
)
答案 2 :(得分:0)
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
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/(\S+)\s+(\S+)\s+(\S+)/\3 \2 \1/' file
答案 4 :(得分:-1)
你没有考虑空白。
在单词之间使用[\ t] +。