如何在unix中从文件中搜索单行模式
假设我的文件只有一行如何在unix中从文件中搜索单行模式,unix,command,Unix,Command,假设我的文件只有一行 /a/n/v//9.3/b/ld --verbose -o o/c/f/r1 -r o/c/f/fn.o o/c/f/fyt.o L/fs/ed/pl/tls/oe -L/apps/ose/5.5.3//lib/powerpc -lc -lrt -lm -lcp -lel -lip -lubs -lpp -lpc /a/oe/5.3//g3/l/g.3/nf/libgcov.a -lrds -l00_ex -lmcu /a/n/v//9.3/b/ld --verbo
/a/n/v//9.3/b/ld --verbose -o o/c/f/r1 -r o/c/f/fn.o o/c/f/fyt.o L/fs/ed/pl/tls/oe -L/apps/ose/5.5.3//lib/powerpc -lc -lrt -lm -lcp -lel -lip -lubs -lpp -lpc /a/oe/5.3//g3/l/g.3/nf/libgcov.a -lrds -l00_ex -lmcu /a/n/v//9.3/b/ld --verbose -o o/ce/wef/r34
我想搜索以“-l”开头的模式,并在另一个文件中按以下顺序排列
-lc
-lrt
-lm
-lcp
-lel
-lip
-lubs
-lpp
-lpc
-lrds
-l00_ex
-lmcu
可以使用什么命令来搜索上述模式 给你:
echo "/a/n/v//9.3/b/ld --verbose -o o/c/f/r1 -r o/c/f/fn.o o/c/f/fyt.o L/fs/ed/pl/tls/oe -L/apps/ose/5.5.3//lib/powerpc -lc -lrt -lm -lcp -lel -lip -lubs -lpp -lpc /a/oe/5.3//g3/l/g.3/nf/libgcov.a -lrds -l00_ex -lmcu /a/n/v//9.3/b/ld --verbose -o o/ce/wef/r34" \
| awk '{for (i=1;i<=NF;i++) {if ($i ~ /^-l/) print $i }}' | sort
不用说,如果出于某种原因不希望对输出进行排序,只需在末尾删除| sort
。然后,它将按照cmd行上列出的顺序打印参数。(我想有时候这很重要)
我使用的是一个标准的awk idom,在提供的输入上对每个元素进行迭代
for (i=1;i<=NF;i++)
其中,$i
是输入中第i个位置的值,^
表示“必须在字符串的前面”,而-l
匹配您提供的任何输入
echo
通过管道将数据传输到awk
表明awk
非常容易从std-in读取数据,因此您可以使用grep yourSearchtarget yourFile | awk…
或任何其他返回处理所需行的命令来替换echo
IHTH你的回答很有用,它按我预期的方式工作。当我使用echo命令时,它显示为“参数列表太长”。所以我尝试使用“cat”命令cat | awk'{for(I=1;I
for (i=1;i<=NF;i++)
if ($i ~ /^-l/ )