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