如何在bash中获取给定字符串第一次出现之前的行内容

如何在bash中获取给定字符串第一次出现之前的行内容,bash,awk,Bash,Awk,我希望在第一次出现搜索字符串之前将一行中的所有字符对齐 示例: $ echo "onefootwofoothreefoo" | some_command_for_foo one $ echo "123_456_789_" | some_command_for_underscore 123 我一直在尝试sed和grep的各种方法,但都没有成功 echo "onefootwofoothreefoo" | awk -Ffoo '{print $1}' echo "123_456_789_" |

我希望在第一次出现搜索字符串之前将一行中的所有字符对齐

示例:

$ echo "onefootwofoothreefoo" | some_command_for_foo
one

 $ echo "123_456_789_" | some_command_for_underscore
123
我一直在尝试sed和grep的各种方法,但都没有成功

echo "onefootwofoothreefoo" | awk -Ffoo '{print $1}'

echo "123_456_789_" | awk -F_ '{print $1}'
仅猛击

f=onefootwofoothreefoo
echo "${f%foo${f#*foo}}"
编辑:正如@JohnB所指出的,以下内容也适用:

f=onefootwofoothreefoo
echo "${f%%foo*}"

老兄,我完全睡在awk上了。谢谢。@JohnB非常正确。在过去的一周里,我不止一次使用过这个。不知道为什么我现在没想到。“偷”它来回答我的问题,谢谢