【问题标题】:Bash how pipe sort, find and grepBash 如何管道排序、查找和 grep
【发布时间】:2018-04-20 08:21:23
【问题描述】:

我正在尝试编写一个 shell 脚本,它获取包含特定数字的文件的一行,问题是我需要对这个文件进行排序,因为我需要最后一个文件的行具有特定名称。 我已经写了这段代码,但它似乎不起作用

sort -n | find -name '*foo*' -exec grep -r -F '11111' {} \;

对文件进行排序非常重要,因为我需要在最后一个文件中进行搜索。文件名的类型为“res_yyyy_mm_dd_foo”,它们必须按 yyyy排序> 和 if 是一样的 mm 等等

【问题讨论】:

  • 您的目录层次结构是什么样的? *foo* 是什么?
  • 编辑了问题,foo 因为我只搜索名称中包含的文件
  • 我会先进行查找,然后是排序,然后是尾部 -1(获取最后一个文件),然后是 grep。
  • 我的另一个问题呢?
  • $home/input_output.1/inp.1/old_res23403 这就是层次结构

标签: bash shell scripting


【解决方案1】:

听起来像下面这样:

cd home/input_output.1/inp.1/old_res23403/
ls -1 | sort -r | xargs cat -- | grep '11111' | head -n1

ls -1 在当前目录中生成一个文件名列表,每行一个。

sort -r 按字母倒序对它们进行排序,这(假设您的名称使用大端日期格式)将最新文件放在首位。

xargs cat -- 连接所有这些文件的内容。

grep '11111' 查找包含11111 的所有行。

head -n1 将结果限制在第一行。

实际上,这会以相反的顺序为您提供文件的第一个匹配行,即最后一个这样的行。

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 2020-06-10
    • 2012-07-18
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多