如何解决如何在 bash 中以多字符字符串开头剪切每一行上的所有内容?
如何使用通用 shell 命令剪切以给定多字符字符串开头的所有内容?
例如,给定:foo+=bar
我要:foo
(即,删除以 +=
开头的所有内容)
cut
不起作用,因为它只需要一个单字符分隔符,而不是多字符字符串:
$ echo 'foo+=bar' | cut -d '+=' -f 1
cut: bad delimiter
如果我不能使用 cut,我会考虑使用 perl
代替,或者如果有另一个更常用的 shell 命令。
解决方法
cut
只允许单字符分隔符。
您可以使用 bash
字符串操作:
s='foo+=bar'
echo "${s%%+=*}"
foo
或者使用更强大的awk
:
awk -F '\\+=' '{print $1}' <<< "$s"
foo
'\+=' 是匹配 +
后跟 =
字符的正则表达式。
您可以使用“sed”命令来执行此操作:
string='foo+=bar'
echo ${string} | sed 's/+=.*//g'
foo
或者如果您使用 Bash shell,则使用以下参数扩展(推荐),因为它不会创建不必要的管道和另一个 sed 进程,因此效率很高:
echo ${string%%\+\=*}
或
echo ${string%%[+][=]*}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。