joh*_*deo 2 command-line scripts rsync text-processing cut-command
我在文件中有以下几行:
Modified folders: html/project1/old/dev/vendor/symfony/yaml/Tests/bla.yml
Modified folders: html/port5/.DS_Store
Modified folders: html/trap/dev8/.DS_Store
Modified folders: html/bla3/test/appl/.DS_Store
Modified folders: html/bla4/pro1/app/bla/Api2.php
Modified folders: html/bla10/dev/appl/language/.DS_Store
Modified folders: html/bla11/dev/appl/language/abc.txt
Run Code Online (Sandbox Code Playgroud)
这基本上是rsync
. 我想列出文件的所有行,最多 3 个目录位置,例如
Modified folders: html/project1/old
Modified folders: html/port5
Modified folders: html/trap/dev8
Modified folders: html/bla3/test
Modified folders: html/bla4/pro1
Modified folders: html/bla10/dev
Modified folders: html/bla11/dev
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我提供任何命令或 shell 脚本来做同样的事情吗?
也许是这样的:
$ sed -r 's|/[^/]*$||' file | sed -r 's|([^/]*/?[^/]*/?[^/]*).*|\1|'
Modified folders: html/project1/old
Modified folders: html/port5
Modified folders: html/trap/dev8
Modified folders: html/bla3/test
Modified folders: html/bla4/pro1
Modified folders: html/bla10/dev
Modified folders: html/bla11/dev
Run Code Online (Sandbox Code Playgroud)
或者您可以使用以下方法完成第二部分cut
:
sed -r 's|/[^/]*$||' file | cut -d '/' -f 1,2,3
Run Code Online (Sandbox Code Playgroud)
-r
使用EREs|old|new|
替换old
为new
[^/]*
任意数量的字符 /
$
行结束/?
零或一 /
(pattern)
保存pattern
以供稍后参考\1
.*
任意数量的任意字符|
(未加引号的)shell 管道 - 将左侧命令的输出传递到右侧命令cut -d '/'
使用/
作为分隔符-f 1,2,3
打印前三个字段