【问题标题】:remove first text with shell script使用 shell 脚本删除第一个文本
【发布时间】:2016-08-17 00:50:25
【问题描述】:

请有人帮我处理这个 bash 脚本, 假设我有很多带有如下网址的文件:

https://example.com/x/c-ark4TxjU8/mybook.zip
https://example.com/x/y9kZvVp1k_Q/myfilename.zip

我的问题是,如何删除所有其他文本并只保留文件名?

我已尝试使用此 url How to delete first two lines and last four lines from a text file with bash? 中描述的命令

但由于文本是随机的,这意味着它没有确切的数字,因此代码不起作用。

【问题讨论】:

  • sed 's;.*/;;' file
  • 不错!非常感谢 Avinash Raj,问题解决了!
  • 仅使用 bash 或 sh:假设 var x 有这样一行,然后 echo ${x##*/} 为您提供文件名部分(##patern 从变量)。
  • 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here?What do I do when someone answers my question?

标签: bash awk sed sh cut


【解决方案1】:

您可以使用 sed 实用程序仅解析文件名

sed 's_.*\/__'

【讨论】:

  • 如果使用_作为分隔符,则不需要对/进行转义。
  • 谢谢 Yaitzme,我也可以使用 sed 命令,非常感谢
  • 哦,是的,每行只有一个文件名。
  • 最后两个下划线很难区分。您可以使用其他分隔符。
  • @Yaitzme 不,因为.*/ 应该从开头匹配到最后一个正斜杠。所以每行必须有一个匹配。
【解决方案2】:

你可以使用awk:

我找到的最简单的方法:

awk -F/ '{print $NF}' file.txt

awk -F/ '{print $6}' file.txt

你也可以使用sed:

sed 's;.*/;;' file.txt

你可以使用cut:

cut -d'/' -f6 file.txt

【讨论】:

  • 你忘了 grep,grep -o '[^/]+$' file
  • 我不相信 cut 命令或 awk 的等效用法。重要的部分是打印 last 字段,而不是第 6 个。
  • 是的,但也有 awk 解决方案可以打印最后一列@TomFenech
  • 我可以看到,我的观点是使用固定字段的解决方案并没有真正为您的答案添加任何有用的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
相关资源
最近更新 更多