UNIX-文件中的模式匹配

时间:2019-03-13 20:17:48

标签: regex unix

所以我有一个包含以下内容的文件:

username=jsmith
api=3434kjklj23j4l3kj4l34j3l4j

我想使用正则表达式“ jsmith”和“ 3434kjklj23j4l3kj4l34j3l4j”返回

我知道它的正则表达式是:

(username=)(.*) > \2
(api=)(.*) > \2

但是使用grep或sed或awk。我似乎无法弄清楚使用它们的方式而不返回整行。

您将如何使用命令行命令执行此操作?

4 个答案:

答案 0 :(得分:3)

awk用于此任务:

awk -F= '{print$2}' file

如果文件中还有其他条目,则可以使用以下条件限制输出:

awk -F= '$1=="username"||$1=="api"{print$2}' file

答案 1 :(得分:1)

这里是使用bash,PCRE和正向后向(在支持的情况下)的一种:

$ grep -Po "((?<=^username=)|(?<=^api=)).*" file
jsmith
3434kjklj23j4l3kj4l34j3l4j

即。输出username=api=开头的所有内容。

awk中的一个:

$ awk 'sub(/^(username|api)=/,""){print}' file
jsmith
3434kjklj23j4l3kj4l34j3l4j

即。首先删除^username=^api=之前的打印行。

答案 2 :(得分:0)

由于您希望看到chess和输入game=chess,因此这里有些解决方案没有匹配username=api=

cut -d"=" -f2- file
# or 
sed -n 's/[^=]*=//p' file

答案 3 :(得分:0)

这是适用于macOS和RHEl7的答案。

awk -F= '$1=="username"{print$2}'  testfile.txt
awk -F= '$1=="api"{print$2}'  testfile.txt

testfile.txt

username=user1 
api=pass1  
  username=user2 
api =pass2