regex - 替换除行尾以外的值

标签 regex sed

所以我有一个包含 ASCII STX 字符(可使用\x02 定位)的文本文件。如果它们不在行尾,我想删除它们。

# This removes all STX characters
sed -i 's/\x02//g' foo.txt

# This removes STX characters that are at the end of a line
sed -i 's/\x02$//g' foo.txt

如果字符不在行尾,如何删除它?

最佳答案

您可以在需要删除的一个或多个字符之后匹配并捕获任何字符,以便稍后使用反向引用恢复它:

sed -i 's/\x02\{1,\}\(.\)/\1/g' foo.txt

在这里,\x02\{1,\}匹配 1 个或多个需要删除的字符,\(.\)将匹配并捕获到组 1 中的任何字符和 \1将在结果中恢复捕获的字符。

关于regex - 替换除行尾以外的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146753/

相关文章:

regex - 正则表达式类型的 Golang SplitAfter

javascript - 替换嵌套括号中的内容

regex - 在终端中使用 RegEx 从字符串中提取字符串

linux - Bash 脚本 - 向文件添加内容

bash - 包含变量的 sed 命令不起作用

linux - 无法使用 sed 转义反斜杠

ruby - 检查字符串是否以 ruby​​ 中的正则表达式开头以匹配 "[NATURAL NUMBER]"

bash - 使用 sed 命令在文件中添加带反斜杠的字符串

linux - 将文件修改日期和 "grep"结果通过 "find"组合在一行中

regex - Perl正则表达式-(x | y)*是否等于[xy] *?