unix - сопоставление с образцом в файле - PullRequest
0 голосов
/ 13 марта 2019

поэтому у меня есть файл со следующим:

username=jsmith
api=3434kjklj23j4l3kj4l34j3l4j

Я хотел бы вернуться, используя регулярные выражения "jsmith" и "3434kjklj23j4l3kj4l34j3l4j"

Я знаю, что регулярное выражение для него:

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

с использованием grep, sed или awk.Я не могу понять, как их использовать, не возвращая всю строку.

Как бы вы поступили с командной строкой?

Ответы [ 4 ]

3 голосов
/ 13 марта 2019

awk сделано для этой задачи:

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

Если в файле есть другие записи, вы можете ограничить вывод с помощью условия:

awk -F= '$1=="username"||$1=="api"{print$2}' file
1 голос
/ 13 марта 2019

Вот один из них, использующий bash, PCRE и позитивный взгляд назад (где поддерживается):

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

есть. выведите все, что предшествует username= или api=, которые начинают строки.

И один в awk:

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

т. выведите строки, в которых предшествующие ^username= или ^api= удалены первыми.

0 голосов
/ 18 марта 2019

вот ответ, который работал на 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
0 голосов
/ 14 марта 2019

Поскольку вы хотите видеть chess с помощью ввода game=chess, здесь приведены некоторые решения, не соответствующие username= или api=

cut -d"=" -f2- file
# or 
sed -n 's/[^=]*=//p' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...