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