【问题标题】:How to fetch the file names present in the text file and delete that files using shell如何获取文本文件中存在的文件名并使用 shell 删除这些文件
【发布时间】:2016-02-23 15:28:31
【问题描述】:

我想删除文本文件中提到的一些文件。文本将与其他一些数据一起在一行中,如下所示

Cannot Handle File:C:\patches\BUG2\abc.javaCannot Handle File:C:\patches\BUG2\xyz.javaErrors .

所以现在我想在文本文件中获取 abc.java 和 xyz.java 之类的文件名并删除它们,以便我们如何使用 shell 继续它。请帮忙解决这个问题

【问题讨论】:

  • @anubhava 是的,输入文件中.java 后面没有空格

标签: shell


【解决方案1】:

Perl 的救援:

perl -lne 'unlink $1 while /File:(.*?)(?:Cannot|Errors)/g' input.txt
  • -l 为打印添加换行符
  • -n逐行处理输入
  • (.*?) 匹配“节俭”,即找到可能的最短匹配项
  • /g 全局匹配,即尽可能多地匹配。
  • unlink 删除文件。

因此,文件名必须以File: 开头,后跟CannotErrors

【讨论】:

  • @vinod:你的意思是你的 linux 中没有安装 Perl?
  • 不,我需要在我的 linux 脚本中添加该逻辑
  • @vinod:“linux 脚本”是什么意思?是 bash、sh、dash、csh、tcsh、ksh 吗?是什么阻止您将我在此处显示的行复制到脚本中?
  • @vinod:这里显示的行是合法的 sh 脚本行。
【解决方案2】:

使用grep -oxargs

grep -Eo '[[:alnum:]_$-]+\.java' file | xargs rm

将从grep 获得此输出:

grep -Eo '[[:alnum:]_$-]+\.java' file
abc.java
xyz.java

【讨论】:

  • 我在执行你的命令时遇到错误你能帮忙吗用法:grep [-c|A NUM|B NUM|C NUM] -[alqinsvxrdhLowuVEFG] [-U[[c][p ][l|b|8|o|a]]]] [-bI] [-e 模式] [-f 模式文件] [--basic-regexp] [--extended-regexp] [--fixed-strings] [--byte-offset] [--unix-byte-offsets] [--binary] [--text] [- NUM] [--context[=NUM]|--before-context=NUM|--after -context=NUM] [--word-regexp] [--revert-match] [--text] [--recursive] [--version] [pattern] [file ...]
  • 你的 grep 版本是什么,你的操作系统是什么?
  • 所以您使用的是 Windows grep,但将您的问题标记为 linux?
  • grep 版本是版本 9.5 build 3505,已经存在
  • 使用此链接在 Windows 上安装 gnu grep:gnuwin32.sourceforge.net/packages/grep.htm,我建议的命令将起作用。
猜你喜欢
  • 2017-11-21
  • 1970-01-01
  • 2020-02-23
  • 2012-04-26
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多