我有这个命令
grep 'Some pattern' location/*filename* | cut -d ' ' -f2 | cut -d '}' -f2 |
grep -v '^$' | head -1
上面的命令将输出作为一些文件名,例如:
abc.txt
现在我想从这个文件abc.txt中找到另一行并匹配一些特定的模式,所以我这样做了
grep 'some pattern' location/*filename* | grep -iv .tar | grep -v backup |
grep -v bkp | cut -d ' ' -f2 | cut -d '}' -f2 | head -1 | xargs grep 'some pattern'
它无效,因为我当前目录中没有abc.txt
文件。
在将abc.txt
命令传递给xargs grep
之前,有人可以告诉我如何将位置路径附加到{{1}}吗?
答案 0 :(得分:0)
你可以试试这个,
grep 'some pattern' location/*filename* | grep -iv .tar | grep -v backup |
grep -v bkp | cut -d ' ' -f2 | cut -d '}' -f2 | head -1 | xargs |
sed 's#.*#/path/to/dir/&#g' | xargs grep 'some pattern'
答案 1 :(得分:0)
如果cmd
生成输出“bar”,但您需要“foobar”,则可以执行以下操作:
printf foo; cmd
在您的情况下,如果您想在输出中添加/p/a/t/h
,请执行以下操作:
{ printf /p/a/t/h/; grep 'some pattern' filename | ... | head -1; } | xargs ...
但您最好只用head -1
替换sed -e 1s@^@/p/a/t/h/@ -e 1q
答案 2 :(得分:0)
从表面上看,如果第一个命令序列为您提供某个目录中文件的名称,则需要使用find
来获取该文件的路径名:
find . -type f -name $(grep 'Some pattern' location/*filename* | cut -d ' ' -f2 |
cut -d '}' -f2 | grep -v '^$' | head -1) \
-exec grep 'some pattern' {} +
在第一行之后你不需要反斜杠(虽然它不会造成伤害);你需要在第二行之后使用反斜杠。您可以为搜索指定与.
不同的起点。
答案 3 :(得分:0)
大家好,感谢您的建议..我也找到了解决问题的方法..
FYI
这是我用的......
echo "dev/temp/text/"$(grep 'Some pattern' location/*filename* | cut -d ' ' -f2 | cut -d '}' -f2 | grep -v '^$' | head -1) | xarg grep 'some pattern'
答案 4 :(得分:0)
一些想法:
... | head -1 | sed 's,^,location/,' | xargs grep 'some pattern'
或
... | head -1 | xargs -I FILE grep 'some pattern' location/FILE