如何在Cygwin中使用正则表达式查找和替换

问题描述:

我试图找到一个后面跟着一个辅音的'r',并在文本文件1.txt中将其删除。我的代码如下如何在Cygwin中使用正则表达式查找和替换

cat 1.txt | grep s/.*r([^aeiou])/\1/g 

我知道在Cygwin中使用grep命令与正则表达式,但我无法做到这一点。

+0

我想你想用'sed',而不是'grep'。试试'sed's /。* r \([^ aeiou] \)/ \ 1/g'' –

+0

也不适用于sed – Coddy

+0

如果您在替换后添加示例文本和所需的输出,这将有所帮助。 – CoreyJJohnson

grep只会在输入文件中找到所需的正则表达式模式。如果要通过删除这些事件来编辑文件,最好使用sed

如果你的文件被称为ab,试试这个:

sed -i .bkp 's/r[^aeiou]//g' ab 
+0

你能用sed使用正则表达式吗?什么是.bkp?谢谢 – Coddy

+1

这个命令将创建一个名为'ab.bkp'的备份文件,它是原始文件'ab'的备份文件。 '-i'选项提供了您想要提供给备份文件的扩展名。 –

+1

'r [^ aeiou]'是一个正则表达式。所以,是的,'sed'允许正则表达式。 –

删除 'R'?删除辅音?删除线?请说明“删除它”。

如果您在文档的某个位置有.*r[A-Z0-9],我建议您将更换为[^aeiou]

在这里,我拆到这三个查询,你可以把任何在文字后面你用\ 1 \ 2 \ 3,如:使用SED

sed 's/\(.*\)\(r\)\([^aeiou]\)/\1\2\3/g' 1.txt

'R' 去除:sed 's/\(.*\)\(r\)\([^aeiou]\)/\1\3/g' 1.txt

* R去除使用SED:sed 's/\(.*\)\(r\)\([^aeiou]\)/\3/g' 1.txt

辅音去除使用SED:sed 's/\(.*\)\(r\)\([^aeiou]\)/\1\2/g' 1.txt

使用SED

- [R [^ AEIOU]去除:sed 's/\(.*\)\(r\)\([^aeiou]\)/\1/g' 1.txt

线去除使用

SED:sed '/r[^aeiouAEIOU]/d' 1.txt

或以下,如果你有与数字或符号行:

sed '/r[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]/d' 1.txt

使用grep删除行:cat 1.txt | grep r[aeiouAEIOU]

或以下,如果你有数字或符号线:

cat 1.txt | grep -v r[bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]

你得到了错误的工具,如grep(1)只过滤输入线路输出,你需要sed(1),以编辑[rR][bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]碰巧发生的地方。

sed 's/[rR]\([bcdfghijklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]\)/\1/g' 

将只擦除第一rR。如果你需要擦除两者,只要做

sed 's/[rR][bcdfghijklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]//g'