shell - sed 命令替换制表符和空格分隔的文本行中的单词
问题描述
我在文件“text.txt”中有以下字段,由制表符和空格分隔。我想使用 sed 命令查找 "^@\t*\s text1\t \s text2\t \s 100" 并将其替换为 "^@\t \s text1\t \s text2\t \s* 1000"
<Field1> <Field2> <Field3> <Field4>
@ text1 text2 100
$ text3 text4 200
我尝试使用以下 sed 命令:
sed -i "/^\s*\@\s+text1\s+text2\s*/c\@/\t/\ttext1/\ttext2/\t/\t1000" /text.txt
但是,文件中没有任何内容被替换。
解决方案
您的主要问题是您+
在被视为文字+
符号的 POSIX BRE 正则表达式中使用未转义。
您需要使用-E
选项来启用 POSIX ERE 语法,其中+
被视为量词。此外,您在替换中有几个多余/
的字符,您需要将它们删除。
您可以使用
sed -E -i "/^\s*\@\s+text1\s+text2\s*/c\@\t\ttext1\ttext2\t1000" file
请参阅在线演示。
推荐阅读
- docusignapi - Salesforce DocuSign 签名 - 根据收件人的 DocuSign 签名者类型有条件地更新机会?
- python - 使用渲染时如何修复 TemplateDoesNotExist 错误?
- c# - 为什么微调器没有立即停止并显示消息弹出?
- pyspark - 从 IBM Cloud Pack for data 在 Watson Studio 中的 Pyspark 中安装外部依赖项
- angular - 如何在不调用 fixture.detectChanges() 的情况下绑定模板?
- python-3.x - Python没有写入日志
- json - 在 Bash 中对 JSON 记录进行分组和排序
- android - Jwplayer 不会同时播放多个视频
- java - 如何重新加载 JFrame?
- python - 从 AWS S3 存储桶引用对象时,无法执行 pandas read_excel 函数两次