我需要 grep 所有以“[”开头并以某个字符串结尾的字符串,例如“apal”。因此这两个字符之间的所有字符也会显示。给定一个输入,例如:
[44060]apal223reaea[55000]opoer4nr4on[95749]assad fdfdf Bhassrj sdaapald33qdq3d3da3ded[66000]dsfsldfsfldkj[77000]porpo4o4o3j3mlkfxxxx[101335]KaMMMM MMM lapa[131322]sadasds ddd apaladsdas[138133]sadasdadasddsss KMMapaldsadsadwe[150000]idhoqijdoiwjodwiejdw
输出会是谎言
[44060]apal
[95749]assad fdfdf Bhassrj sdaapal
[101335]KaMMMM MMM lapal
[131322]sadasds ddd apal
[138133]sadasdadasddsss KMMapal
答案1
使用:
grep -o '\[.*apal' file.txt
替换file.txt
为实际文件名。
另一方面,如果您想[
在行的开头进行匹配:
grep -o '^\[.*apal' file.txt
答案2
尝试:
grep -o '^\[.*apal$' file.txt
匹配正则表达式的命令:.......usegrep
来匹配仅有的编写的正则表达式, ........use-o
要匹配行的开头, .................use ^
:^\[
要匹配之间的任何字符, .use .
:.*
要匹配行尾,......................请使用$
:apal$
包含要匹配内容的文件。:file.txt
答案3
最好使用 sed,而不是使用 grep。
sed 's/.*\(X.*Y\)/\1/p' < file.txt
将 X 替换为起始模式,将 Y 替换为结束模式。该命令将所有与 X 到 Y 匹配的内容放入 sed 的缓冲区 1 中。替换模式中的“\1”将打印该缓冲区。
所以,在你的例子中:
sed 's/.*\(\[.*apal\)/\1/p' < file.txt
应该可以解决问题。
答案4
[
如果您只想要和之间的文本apal
,perl 是一个不错的选择
perl -lne '/(?<=\[)(.+?)(?=apal)/ and print $1' file
如果您安装了 GNU grep(例如通过自制程序),您可以
grep -Po '(?<=\[).+?(?=apal)' file