多次出现某些字符后,如何删除整个字符串?

时间:2019-06-20 12:20:50

标签: bash shell awk sed

我要打印整个字符串,后跟“ $”,并删除所有其他字符和字符串。

使用sed命令尝试

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

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

使用此代码

从上述代码中收到的结果:$FILE $read ammy my

预期结果:$FILE $read

2 个答案:

答案 0 :(得分:1)

不要考虑要删除的内容(负逻辑),请考虑要打印的内容(正逻辑):

$ 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)

答案 1 :(得分:0)

您可以使用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