所以我有一个包含以下内容的文件:
username=jsmith
api=3434kjklj23j4l3kj4l34j3l4j
我想使用正则表达式“ jsmith”和“ 3434kjklj23j4l3kj4l34j3l4j”返回
我知道它的正则表达式是:
(username=)(.*) > \2
(api=)(.*) > \2
但是使用grep或sed或awk。我似乎无法弄清楚使用它们的方式而不返回整行。
您将如何使用命令行命令执行此操作?
答案 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