问题 sed 命令中 同时出现 ^ 和$ LINUX 会以哪个为准;
比如 一个文件中 第一行 有4个/ 第二行有 2个/ 第三行有3个/ (如图)
那么我的这条命令 sed -r 's#(^.*)(.*/.*/)(.*$)#\3\2\1#g' test.txt 中 第二个表达式(.*/.*/) 指定了俩个/
那么 linux 会判断 我 最后 一个 式子 是 从前面的计算,(也就是 不包含我前俩个/的内容),
还是 从后往前 判断 认为 我第二个表达式的俩个/ 是 针对任何行的最后俩个 /吗
这是问题的来源
把test.txt中第一个单词和最后一个单词调换位置
sed -r 's#(^.*)(:.*:)(/.*$)#\3\2\1#g' test.txt
发现这样写的结果 不对
/bin/bash:/root:root:x:0:0:root ------结果
root:x:0:0:root:/root:/bin/bash --------源
铭哥的写法是:
sed -r 's#(^.*)(:x:.*)(/.*$)#\3\2\1#g' test.txt
这样虽然可以 但是 只是针对 /etc/passwd 文件中 第二列的 "x" 相同, 如果按照我的 图片中的文件,这样写可能就不行了。
于是 我最后是使用了最笨的方法
sed -r 's#(^.*)(:.*:.*:.*:.*:.*:.*/.*/)(.*$)#\3\2\1#g' test.txt
bash:x:0:0:root:/root:/bin/root (最后一个单词与第一个调换)
sed -r 's#(^.*)(:.*:.*:.*:.*:.*:.*)(/.*/.*$)#\3\2\1#g' test.txt
/bin/bash:x:0:0:root:/root:root (最后的shell 与第一个单词调换)
但是 如果 每一行都特别长,,我想我这样写也不好, 请求大神给出 方法。。{:7_173:} 小弟谢过
比如 一个文件中 第一行 有4个/ 第二行有 2个/ 第三行有3个/ (如图)
那么我的这条命令 sed -r 's#(^.*)(.*/.*/)(.*$)#\3\2\1#g' test.txt 中 第二个表达式(.*/.*/) 指定了俩个/
那么 linux 会判断 我 最后 一个 式子 是 从前面的计算,(也就是 不包含我前俩个/的内容),
还是 从后往前 判断 认为 我第二个表达式的俩个/ 是 针对任何行的最后俩个 /吗
这是问题的来源
把test.txt中第一个单词和最后一个单词调换位置
sed -r 's#(^.*)(:.*:)(/.*$)#\3\2\1#g' test.txt
发现这样写的结果 不对
/bin/bash:/root:root:x:0:0:root ------结果
root:x:0:0:root:/root:/bin/bash --------源
铭哥的写法是:
sed -r 's#(^.*)(:x:.*)(/.*$)#\3\2\1#g' test.txt
这样虽然可以 但是 只是针对 /etc/passwd 文件中 第二列的 "x" 相同, 如果按照我的 图片中的文件,这样写可能就不行了。
于是 我最后是使用了最笨的方法
sed -r 's#(^.*)(:.*:.*:.*:.*:.*:.*/.*/)(.*$)#\3\2\1#g' test.txt
bash:x:0:0:root:/root:/bin/root (最后一个单词与第一个调换)
sed -r 's#(^.*)(:.*:.*:.*:.*:.*:.*)(/.*/.*$)#\3\2\1#g' test.txt
/bin/bash:x:0:0:root:/root:root (最后的shell 与第一个单词调换)
但是 如果 每一行都特别长,,我想我这样写也不好, 请求大神给出 方法。。{:7_173:} 小弟谢过
编辑回复