尝试删除每行的前几个字符但无法删除 ./

尝试删除每行的前几个字符但无法删除 ./

将此视为文件:

M  ../.gitlab-ci.yml
M  ../force-app/main/ui/classes/test.cls
A  ../pmd/get_diff_branches.sh
?? ../assets/server.key
?? ./

我将从行中一一删除所有额外的字符,如下所示:

sed /^D/d diff.txt | sed 's/^..//' | sed /^force-app/p | sed /^force-app\\/package\.xml/d | sed 's/.*\ ->\ //' > temp.txt

执行此操作后,文件如下所示:

 ../.gitlab-ci.yml
 ../assets/server.key
 ../force-app/main/ui/classes/test.cls
 ../pmd/get_diff_branches.sh
 ./

如何./在同一行中删除,如果我编写另一个命令,那么它将开始./从所有行中删除,但我只想./在存在完全匹配时删除,例如上面代码片段中的最后一行。

操作系统 :Linux 10

答案1

首先,不需要单独的sed命令。您可以将多个命令串在一起,-e或者,如果您sed支持的话,只需用 分隔它们;。另外,您的命令之一只会复制一行:sed /^force-app/p。假设您不想重复该行(如果您使用sed -n抑制打印),那么这才有意义。

如果您有 GNU ,这应该可以满足您的要求sed

$ sed 's/^[^ ]*  *//; /\/force-app\/package\.xml/d; /^\.\/$/d' file
../.gitlab-ci.yml
../force-app/main/ui/classes/test.cls
../pmd/get_diff_branches.sh
../assets/server.key

而且,如果您没有 GNU sed,请尝试:

$ sed -e 's/^[^ ]*  *//' -e '/\/force-app\/package\.xml/d' -e '/^\.\/$/d' file
../.gitlab-ci.yml
../force-app/main/ui/classes/test.cls
../pmd/get_diff_branches.sh
../assets/server.key

命令是:

  • s/^[^ ]* *//:从行首删除所有非空格字符,后跟 0 个或多个空格。
  • /\/force-app\/package\.xml/d:如果该行匹配/force-app/package.xml,则删除它。我在这里猜测,因为您的示例不包含任何与此模式匹配的行。您正在使用^force-app...,但这不可能是正确的,因为您/在它之前总是有一个。
  • /^\.\/$/d:删除包含以下内容的所有行仅有的 ./没有别的。

相关内容