如何从文本中删除引号

use*_*633 8 text-processing

我有一个文件如下。

"ID" "1" "2"
"00000687" 0 1
"00000421" 1 0
Run Code Online (Sandbox Code Playgroud)

我想让它如下。

00000687 0 1
00000421 1 0
Run Code Online (Sandbox Code Playgroud)

我想要

  1. 删除第一行和
  2. 从任何其他行的字段中删除双引号。FWIW,双引号仅出现在第一列中。

我认为cut -c会起作用,但不能成功。我该怎么办?

小智 21

tail+ tr:

tail -n +2 file | tr -d \"
Run Code Online (Sandbox Code Playgroud)

tail -n+2从第二行到最后打印文件。tr -d \"删除所有双引号。


Fra*_*anò 15

这应该有效:

sed -i '1d;s/"//g' filename
Run Code Online (Sandbox Code Playgroud)

解释:

  • -i 将就地修改文件
  • 1d 将删除第一行
  • s/"//g将删除"文件中的每一个

您可以先尝试不用-i,输出将打印到标准输出。


Kus*_*nda 7

解决标题中提出的问题,即从第一个以空格分隔的列中删除双引号,仅:

awk -F ' ' '{ gsub("\"", "", $1) }; NR > 1' file
Run Code Online (Sandbox Code Playgroud)

这使用该gsub()命令从每行的第一个字段中删除所有双引号。所述NR > 1在端部可确保第一行不被打印。

要从第一个字段中删除双引号,但前提是它们显示为字段的第一个和最后一个字符:

awk -F ' ' '$1 ~ /^".*"$/ { $1 = substr($1, 2, length($1) - 2) }; NR > 1' file
Run Code Online (Sandbox Code Playgroud)

这使用了一个正则表达式,^".*"$检测第一个字段的开头和结尾是否有双引号,如果有,substr()则触发提取字符串内部部分的块。保留字段中的任何内部双引号。