gpt4 book ai didi

bash - 使用 grep 或 sed 替换不匹配模式的单词

转载 作者:行者123 更新时间:2023-11-29 09:33:21 24 4
gpt4 key购买 nike

我是正则表达式范例的新手,我遇到了一个我试图解决的问题,但没有成功。

假设一个文件 test.txt 包含:

hello everyone, whatsi up
i hope my program worksa
if it doesnt... ho well!

我想输出到另一个文件 output.txt 只有以辅音开头和以元音结尾的单词,所以它会导致:

hello whatsi
hope worksa
ho

我正在使用 grep -o '\b[^ aeiouAEIOU]\w*[aeiouAEIOU]\b' test.txt > output.txt 但是,-o 标志将每个匹配的字符串输出到一个新行。我应该怎么做才能获得我想要的格式?另一个有效的选择是使用 sed 将与该模式不匹配的所有内容替换为空格,但我也没有这样做。我应该改用 sed 还是 awk?

谢谢

最佳答案

您可以指示 grep 将输入视为一组以空字节终止的行,即,如果您的输入不包含空字节,则作为一个长行,使用 -z /--空数据标志。

这样你就可以保留换行符(注意 ...| |\n 最后):

$ grep -Pozi '\b[bcdfghjklmnpqrstvwxyz]\w*[aeiou]\b| |\n' file
hello whatsi
hope worksa
ho

但以出现空字节 (\x0) 字符为代价(由于我们的正则表达式,还有多个空格)。这些可以用一些 sed 表达式来修复:

$ grep -Pozi '\b[bcdfghjklmnpqrstvwxyz]\w*[aeiou]\b| |\n' file \
| sed -E -e 's/\x0//g' -e 's/ +/ /g' -e 's/^ //' -e 's/ $//'
hello whatsi
hope worksa
ho

(一个去除空字节,一个用一个空格替换多个空格,两个去除前导和尾随空格)。

关于bash - 使用 grep 或 sed 替换不匹配模式的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46589672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com