Shell-Sed REGEXP从一个单词到最后一个逗号和行尾的捕获

Shell-Sed REGEXP从一个单词到最后一个逗号和行尾的捕获,regex,bash,shell,sed,Regex,Bash,Shell,Sed,我正在使用sed处理regex 我正在读一个有行的文件 word1 word2 myword word4 word5 word6, lorem ipsum dolor amet myword asinus es salut comment ca va myword c'est comme ca, 我想去 word1 word2, lorem ipsum dolor amet salut comment ca va, 这只是我文件的一部分,这就是为什么我只需要一行一行地工作。 我只能找到:

我正在使用sed处理regex 我正在读一个有行的文件

word1 word2 myword word4 word5 word6,
lorem ipsum dolor amet myword asinus es 
salut comment ca va myword c'est comme ca,
我想去

word1 word2,
lorem ipsum dolor amet
salut comment ca va,
这只是我文件的一部分,这就是为什么我只需要一行一行地工作。 我只能找到:

echo $line | sed -e 's/\(myword.*\)\(,\)$/\2/g'
但我只知道

word1 word2,
lorem ipsum dolor amet myword asinus es 
salut comment ca va,
我无法捕捉是否有最后一个逗号。有人能帮我吗


问题更多:我想在“myword”之前获取所有内容,如果使用sed regexp,则保留最后一个逗号


谢谢

您可以使用标签。检查行是否以逗号结尾,并采取相应措施:

sed -e '/,$/{s/\( myword.*\)\(,\)$/\2/; ba}' -e 's/\( myword.*\)//' -e :a inputfile
对于您的输入,生成:

bla bla bla,
ble ble ble
blo blo blo,

从“myword”到逗号或行尾,你只需扔掉所有东西:

$ sed 's/\(.*\) myword[^,]*/\1/' file
word1 word2,
lorem ipsum dolor amet
salut comment ca va,
这可能适用于您(GNU-sed):

它从
myword
之前的第一个空格删除到
或行尾的第一个空格,或:

sed 's/ myword.*\([^,]\|\(,\)\)$/\2/' file

它从
myword
之前的第一个空格删除到行尾或行尾之前的

您是否试图获取“myword”之前的所有内容(在这种情况下,为什么是逗号?)或myword之后的所有内容(在这种情况下,为什么输出行1上只有3个“blas”)或每行最后3个字段或其他内容?请更新您的示例输入、预期输出和描述以澄清。我想在“myword”之前获取所有内容,如果我有使用sed regexp的逗号,请保留最后一个逗号。您刚刚更新了问题。你能看看你的预期产量吗?这似乎不一致——两行包含
myword
,一行不包含。最好解释一下?抱歉,编辑后现在可以。@devnull=>是!这就是答案。非常感谢!@Rahul==>我尝试了你的解决方案,但没有成功:(如果你使用的不是s、g和p(带-n)在sed中,要么你使用了错误的工具,要么有一个更简单的sed解决方案。所有其他sed语言结构在20世纪70年代中期awk发明时就已经过时了。+1完全同意你对
sed
的想法。使用分支和缓冲区只会导致代码变得模糊和无法维护。尽管我私下里确实喜欢偶尔的challenges可以在
sed
中解决复杂的问题,但除了替换之外,它从来都不是我的首选工具。
sed 's/ myword.*\([^,]\|\(,\)\)$/\2/' file