如何从文本中删除引号

如何从文本中删除引号

我有一个如下文件。

"ID" "1" "2"
"00000687" 0 1
"00000421" 1 0

我想做如下。

00000687 0 1
00000421 1 0

我想要

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

我认为cut -c可行,但无法实现。我应该怎么办?

答案1

tail+ tr:

tail -n +2 file | tr -d \"

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

答案2

这应该有效:

sed -i '1d;s/"//g' filename

解释:

  • -i将就地修改文件
  • 1d将删除第一行
  • s/"//g将删除"文件中的所有内容

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

答案3

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

awk -F ' ' '{ gsub("\"", "", $1) }; NR > 1' file

这使用该gsub()命令删除每行第一个字段中的所有双引号。最后NR > 1的 保证不打印第一行。

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

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

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

答案4

有多种方法可以获得您想要的输出,其中一种可以是cut -c.只需定义要提取的字符范围并将输出通过管道传输到tail --lines=+2命令即可删除标题(第一行)。例如:

cut -c2-9,11-14 <your_file_name> | tail --lines=+2

-c2-9,11-14选项定义字符位置范围从 2 到 9(ID 列的字符位置)和从 11 到 14(除 ' " ' 之外的其余字符的字符位置)。

tail --lines=+2命令打印文件中的所有行,但从第二行开始。

有关cut命令的更多信息,您可以访问此地点

相关内容