在Bash中删除以特定模式开头的字符串

4
我尝试从字符串中删除所有以-L开头的单词。例如:
输入:
-L/home/a -la -L/home/b -lb

输出:

-la -lb

你知道这个问题有什么简洁明了的解决方案吗?我的想法行不通。
echo $(sed 's/-L\w//g' <<< "-L/home/a -la -L/home/b -lb") 

<<< 是什么意思?我从来没有见过。 - DevZer0
1
@DevZer0 这被称为“here string”,在man bash中有描述。 - Lev Levitsky
3个回答

1

你已经接近成功了:斜杠是非单词字符,你需要匹配多个字符,所以尝试使用:

echo $(sed 's/-L\S*//g' <<< "-L/home/a -la -L/home/b -lb") 

1
这是接近的代码:
$ echo '-L/home/a -la -L/home/b -lb' | sed 's/-L[^[:space:]]*//g'
 -la  -lb

如果你除了空格之外没有其他空白符号,那么只需要
$ echo '-L/home/a -la -L/home/b -lb' | sed 's/-L[^ ]*//g'
 -la  -lb

你可能仍然需要去除过多的空格。

1
尝试使用这个sed。
echo "-L/home/a -la -L/home/b -lb" | sed 's/-L[^ ]*//g'

如果您不想在首行有更多的空白和间距

sed 's/-L[^ ]*//g;s/^ //' file.txt | tr -s " " 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接