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

Bash 如何在某些字符多次出现后删除整个字符串?,bash,shell,awk,sed,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不要考虑要删除的内容(负逻辑),要考虑要打印的内容(正逻辑): 或使用GNU awk进行多字符RS和RT: $ echo 'FINDER=$FILE/$rea

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

尝试使用sed命令:

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

echo "$FINDER" | sed -r "s|[^a-zA-Z$]| |g"
使用此代码

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


预期结果:
$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

在这两种情况下,我们只需为要打印的字符串定义regexp($后跟字母字符),然后打印匹配的字符串(对于grep,通过
-o
,然后收集,然后打印awk的所有RTs)。

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

你的问题我已经读了三遍了,我还是不明白你的要求。。。你认为英文单词“WHATEVER”是什么意思?你写的需求是双重否定的(考虑
删除X,除了Y
vs
打印Y
),这让你的问题很难理解。很抱歉打扰了Ed!如果变量是字母、字母数字和字母字符的组合,该怎么办?示例:1)FINDER=$F12LE/$read\schcb.yy 2)FINDER=$F12_vcv\$read12/$rishab/ed.yuNo问题。您只需更改regexp以适应。听起来你刚刚在我发布的脚本中将
alpha
更改为
alnum
字符类。我真的认为你可以自己解决这个问题。谷歌是你的朋友-
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