修剪一行中的最后一个字符

修剪一行中的最后一个字符

我有一个csv文件,行的长度不同。但它们都以一个被一对大括号包围的数字结尾。例如,

........{5}
........{16}

例如,我想删除数字和大括号,或者将它们替换为双引号。结果可能是

........
........

或者

........"
........"

我只找到了具有固定长度或行尾具有相同字符串的行的解决方案。

任何想法?

答案1

要删除,请使用 GNU sed

sed 's/{[0-9]\+}$//' file.csv

标准等价物:

sed 's/{[0-9]\{1,\}}$//' file.csv

或者:

sed 's/{[0-9][0-9]*}$//' file.csv

如果您想替换为而不是删除,则替换//为。/"/"

答案2

尝试这个 GNU sed 命令将最后一个替换{..}为双引号,

sed -r 's/^(.*)\{.*\}$/\1"/g' file

例子:

$ cat file
........{5}
........{16}
avhjjk{23}

$ sed -r 's/^(.*)\{.*\}$/\1"/g' file
........"
........"
avhjjk"

并通过awk,

$ awk '{gsub (/{.*}$/,"\""); print}' file
........"
........"
avhjjk"

相关内容