我想在文件中搜索所有出现的模式,并将匹配项替换为等效数量的填充,例如空格或破折号。重要的是要注意 我不想更改文件! 我想将结果打印为标准输出。这就是为什么我更喜欢使用 sed。输出应该与文件的长度相同,因为我想用破折号中的模式长度替换正则表达式找到的每个模式。 示例:假设文件包含以下内容:
data | more data | "to be dashed"
期望的输出:
data | more data | --------------
我目前有这样的事情:
sed -e 's/["][^"]*["]/-/g' file
结果是:
data | more data | -
有什么想法吗?
最佳答案
使用 Perl:
perl -pe 's/(".*?")/ "-" x length($1) /ge' <<END
data | more data | "to be dashed"
data | "more data" | "multi words " "to be dashed"
END
data | more data | --------------
data | ----------- | -------------- --------------
由于需要找到匹配文本的字符串长度,因此需要通过一轮评估运行s///
的替换部分,因此e
旗帜。
关于regex - 如何使用 sed/awk/perl 将匹配的模式替换为等效数量的破折号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786079/