我要打印整个字符串,后跟“ $”,并删除所有其他字符和字符串。
使用sed命令尝试
INPUT: FINDER=$FILE/$read\ammy.my
echo "$FINDER" | sed -r "s|[^a-zA-Z$]| |g"
使用此代码
从上述代码中收到的结果:$FILE $read ammy my
预期结果:$FILE $read
答案 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