我有一个包含以下几行的文件:
revision="abcdabcdabcd0000111122223333"
revision="0000111122223333444455556666"
我想截断引用的字符串(例如,到8),如下所示:
revision="abcdabcd"
revision="00001111"
如何使用sed
/ awk
/ perl
来实现此目标?
答案 0 :(得分:3)
也许:
sed -i 's/\(revision="........\)[^"]*"/\1"/' file
答案 1 :(得分:3)
关键字是否始终修订?字符串中的信息是否总是超过8个字符?
我想我会看到类似的东西:
sed 's/^\([a-z]*\)="\([^"]\{1,8\}\)[^"]*"/\1="\2"/' input > output
这会在等号和双引号之前查找任何只有小写的关键字(记住),然后找到1-8个非双引号字符(记住它们),然后是零或更多其他非关键字双引号和双引号;这些被替换为关键字,等号,双引号,记住的非双引号和双引号。如果有任何尾随材料,则保持不变。
答案 2 :(得分:0)
perl解决方案:
perl -pi.bak -we 's/^revision="[^\n"]{0,8}\K.*/"/' myfile.txt
将在myfile.txt.bak
中保存备份。删除i.bak
以查看输出而不更改文件。删除.bak
以不存储备份(不可逆转)。
正则表达式将查找并更改以revision="
开头的任何行。在此匹配之后,它将保留以下0-8个字符,这些字符不是双引号或换行符(*),并删除其余字符。它会在换行符之前在行尾添加双引号。
(*)添加了换行符以防止嵌入换行符的边缘情况或格式错误的行损坏文件。这将通过添加结束符来“修复”打开的双引号。
答案 3 :(得分:0)
perl -i~ -pe's/^revision="[^"]{0,8}\K[^"]+//' file