我正在尝试构建一个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
反而。 (检测以逗号开头的列(可能后跟空格),然后在替换中重用该开头。)