删除链接grep和awk输出末尾的斜杠,返回控制台



这是我的输入文件:

/home/sites/default/files/Maple%20board02%2019%2013%20.pdf
/home/sites/default/files/paintgrade/side-view.jpg
/home/sites/default/files/paintgrade/steps_2.jpg
/home/sites/default/files/Front%20sill-photo1.gif
/home/sites/default/files/Rear%20steps%20Feb.%209.2011.pdf

这是我的grep/awk声明:

grep /files/ 404s.txt | awk -F '/' '{print $6"/"$7}'

该语句的输出是:

Maple%20board02%2019%2013%20.pdf/
paintgrade/side-view.jpg
paintgrade/steps_2.jpg
Front%20sill-photo1.gif/
Rear%20steps%20Feb.%209.2011.pdf/

(看到后面的斜杠了吗?有时它在那里,有时不在。有时没有子目录,我的awk语句也会打印一个"/"。)

我在另一篇帖子中看到了如何删除尾部斜杠,但我不确定如何在这里应用它。帖子说${1%/}会给你一个没有斜杠的字符串。帖子在这里。投票最高的答案是:target=${1%/}

我想在我的grep/awk语句中添加一些内容,使输出为:

Maple%20board02%2019%2013%20.pdf
paintgrade/side-view.jpg
paintgrade/steps_2.jpg
Front%20sill-photo1.gif
Rear%20steps%20Feb.%209.2011.pdf

我可以在原始语句中添加什么以使输出如上所述?也许cut会有所帮助,或者我的awk可以调整为不打印尾随的"/"?

问题是,如果没有$7,则会出现尾部斜线。这里有一个快速解决方案:

$ grep /files/ 404s.txt | awk -F/ '{s=$6} NF==7 {s=s"/"$7} {print s}'
Maple%20board02%2019%2013%20.pdf
paintgrade/side-view.jpg
paintgrade/steps_2.jpg
Front%20sill-photo1.gif
Rear%20steps%20Feb.%209.2011.pdf

更一般地说,如果存在比paintgrade更深的目录的可能性,则使用:

$ grep /files/ 404s.txt | awk -F/ '{s=$6; for (i=7;i<=NF;i++) {s=s"/"$i}} {print s}'

此外,不需要单独的grep过程:

awk -F/ '!//files//{next} {s=$6; for (i=7;i<=NF;i++) {s=s"/"$i}} {print s}' 404s.txt

一个更通用但更简单的解决方案:使用sed

这将替换grepawk命令:

sed -n 's|.*/files/||p' 404s.txt

要删除该前缀,类似这样的操作将起作用(替换掉字符串,然后使用truth-y模式来获得默认打印操作)。

awk '{sub("^/home/sites/default/files/", "")}7'

如果您需要从行的开头删除X个字段,那么使用cut通常会比使用awk更简单。

cut -d/ -f6-

最新更新