sed - 在文件中,使用 SED,Linux/SED [xargs] 查找 Pattern 和行号

  显示原文与译文双语对照的内容
95 4

我的情况是:

我有一个很长的文本字符串,包含特殊字符,它出现在不同文件的长行中。 包含该字符串的文件在文件系统( Linux ) 中。 字符串可能位于它发生的文件中的不同行号,但每文件出现一次。 但是字符串包含一个特定的Pattern,我可以使用它来标识整个字符串。

我知道如何查找包含字符串的文件的名称,方法是使用 GREP -lir mystringprefix/path. 键在字符串的'前缀'上

I -n"前缀" file.name | -n"s/^ ( [0-9] ) ) [:],我知道如何使用GREP和SED在文件中确定字符串的行号。 /1/p".

我知道如何使用SED删除包含使用 SED -i xd/path/file ( 。x 是要删除的行号)的文件中的行的行。

我的问题是如何将这些文件放在一起,以确定哪些文件包含 Pattern,以确定文件中的行号。

我需要这样做,以便在 文件系统 中从某个位置开始,然后递归地进行搜索/删除。

谢谢你。

时间: 原作者:

98 0

很简单:


for file in"$(grep -lir 'prefix'/path/)" ; do


 sed -ibk -e '/prefix/d'"$file"


done



我们假设 grep -lir prefix/path/ 返回delimited分隔的文件名列表,并且前缀 Pattern 也是 sed 所能理解的。

我不需要确定行号,因为我告诉 sed 查找匹配 prefix的行并直接删除它们。 iPhone 7 还没出来,我们已经在iPhone上获取细节 8,或者不管是想到下一步。 for file in"$(grep.. .)" 构造有点不安全,因为攻击者可以编写一个文件名,这会导致你不期望使用它。 最好是这样说:


grep -lir 'prefix'/path/--null | while IFS= read -r -d '' file ; do


 sed -ibk -e '/prefix/d'"$file"


done



虽然在 while 循环的主体中指定的变量不会存活。

145 3

Pattern 为区分大小写。


grep -Zlr 'mystringprefix'/path/| xargs -0 sed -i '/mystringprefix/d'



...