sed - 查找由 4 个数字组成的字符串,其中包含前一个字符和附加字符

sed - 查找由 4 个数字组成的字符串,其中包含前一个字符和附加字符

我正在尝试构建一个sed命令,该命令允许我搜索并替换大型 csv 文件中的某些值。我有此列,其中包含年份等2005 - 2006 2001 - 2003,但其中也有一些错误,导致 csv 文件中包含许多包含-2001 -2010 -1998此类的单元格。我想要做的是移动-字符串末尾的字符,例如-2001“成为”2001-等。所有受影响的单元格中的模式都是相同的,所有值均由字符-+ 4 个数字组成的年份组成。

sed -e "^-[0-9][0-9][0-9][0-9]"

我是正则表达式的新手,目前正在使用一些教程。

答案1

sed -e "s/^-\([0-9][0-9][0-9][0-9]\)/\1-/" file.csv

\(和之间的部分\)在替换部分中由 引用\1,允许替换为“与搜索匹配的内容”。

^请注意,如果您使用的是 csv 文件,则仅当该列确实是第一个列(与行的开头匹配)时才有效。如果该列位于其他位置,您可能需要使用

sed -e 's/\(,[[:space:]]*\)-\([0-9][0-9][0-9][0-9]\)/\1\2-/' file.csv

反而。 (检测以逗号开头的列(可能后跟空格),然后在替换中重用该开头。)

相关内容