Как удалить всю строку после нескольких вхождений определенных символов? - PullRequest
0 голосов
/ 20 июня 2019

Я хочу напечатать всю строку, за которой следует «$», и удалить все остальные символы и строки.

Пробовал с помощью команды sed:

INPUT: FINDER=$FILE/$read\ammy.my

echo "$FINDER" | sed -r "s|[^a-zA-Z$]| |g"

Использовал этот код

Результат получен из вышеуказанного кода: $FILE $read ammy my

Ожидаемый результат: $FILE $read

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Не думайте о том, что вы хотите удалить (негативная логика), думайте о том, что вы хотите напечатать (позитивно):

$ echo 'FINDER=$FILE/$read\ammy.my' | grep -o '[$][[:alpha:]]*'
$FILE
$read

или с GNU awk для мульти-символьных RS и RT:

$ echo 'FINDER=$FILE/$read\ammy.my' | awk -v RS='[$][[:alpha:]]*' 'RT{o=o s RT; s=OFS} END{print o}'
$FILE $read

В обоих случаях мы просто определяем регулярное выражение для строк, которые мы хотим напечатать ($, за которыми следуют буквенные символы), а затем печатаем соответствующие строки (через -o для grep и собираем, а затем печатаем все RT для awk).

0 голосов
/ 20 июня 2019

вы можете сделать это с помощью Perl:

echo 'FINDER=$FILE/$read\ammy.my' | perl -ne '@a=split(/[^\w\$]+/);print join(" ",grep{/^\$/}@a)."\n"'
$FILE $read

Пояснение:

1. Split the string into an array, take nonletters and non-dollar-signs as the delimiter
2. join all elements which start with a dollar-sign and print them out 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...