如何设置awk识别双引号为一个字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置awk识别双引号为一个字符相关的知识,希望对你有一定的参考价值。

使用“”双引号把一个双引号括起来,然后使用转移字符\去对双引号进行转移,就可以输出双引号。
输出单引号的方法跟双引号又有些差别,方法如下单引号:awk 'print "'\''"'首先使用一个双引号“”,然后在双引号里面加入两个单引号‘’,接着在两个单引号里面加入一个转移的单引号\',就可以输出单引号了
参考技术A 使用“”双引号把一个双引号括起来,然后使用转移字符\去对双引号进行转移,就可以输出双引号。
输出单引号的方法跟双引号又有些差别,方法如下单引号:awk 'print "'\''"'首先使用一个双引号“”,然后在双引号里面加入两个单引号‘’,接着在两个单引号里面加入一个转移的单引号\',就可以输出单引号了

如何在 SED 或 AWK 的行中添加双引号?

【中文标题】如何在 SED 或 AWK 的行中添加双引号?【英文标题】:How to add double quotes to a line with SED or AWK? 【发布时间】:2012-06-01 01:14:46 【问题描述】:

我有以下单词列表:

name,id,3

我需要像这样双引号:

"name,id,3"

我试过sed 's/.*/\"&\"/g',得到了:

"name,id,3

只有一个双引号,缺少结束双引号。

我也试过awk print "\""$1"\"",结果完全相同。我需要帮助。

【问题讨论】:

你的 sed 命令在我的电脑上运行。您可以省略双引号之前的反斜杠,因为它们在单引号字符串中无用。 嗯,是的,这很奇怪。我得到一个双引号。我的原始文件是 file.csv——有一长串“name,id,[[:num:]]”。为什么它不起作用? g 不是必需的,但它不会导致您的问题。你的平台是什么? 【参考方案1】:

这对我有用:

echo name,id,3 | sed 's/name,id,3/"name,id,3"/'
"name,id,3"

【讨论】:

【参考方案2】:

在使用 sed 命令之前,您可以使用 \ 作为转义字符,然后它将在您的字符串中打印 "。例如,我使用以下命令将类似的字符串放在文本文件的第一行:

var = "\"name,id,3\""
sed -i '1i' "$var" /tmp/out.txt

【讨论】:

【参考方案3】:

类似于@Dennis 解决方案,

使用

sed 's/\(.*\)/"\1"/g'

无需查找'\r',这将对所有字符串应用双引号。 这不需要在输入文件上运行 dos2unix。

【讨论】:

【参考方案4】:

我发现的最简单的方法是使用 HEX 代码作为双引号:

 echo name,id,3 | awk 'print "\x22" $1 "\x22"'
 "name,id,3"

【讨论】:

【参考方案5】:

使用它来将您的输入输入:

sed 's/^/"/;s/$/"/'

^ 是行开始的锚点,$ 是行尾的锚点。对于sed 行,我们将分别用"" 替换行开始和行结束。

例子:

$ echo -e "name,id,2\nname,id,3\nname,id,4"|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"

没有sed:

$ echo -e "name,id,2\nname,id,3\nname,id,4"
name,id,2
name,id,3
name,id,4

您的文件似乎有 DOS 行结尾。将其通过dos2unix first

证明:

$ cat test.txt
name,id,2
name,id,3
name,id,4
$ sed 's/^/"/;s/$/"/' test.txt
"name,id,2
"name,id,3
"name,id,4
$ cat test.txt|dos2unix|sed 's/^/"/;s/$/"/'
"name,id,2"
"name,id,3"
"name,id,4"

【讨论】:

【参考方案6】:

您可以像这样使用 awk 而不是 sed:

line='name,id,3'
echo $line | awk 'printf("\"%s\"\n", $0);'

或者更好的是像这样使用 BASH printf:

printf '"%s"\n' $line

【讨论】:

我有这样的命令,但我需要将每个输出行包含在“”中。如何修改这个命令? :awk ' for (i = 2; i result.txt 引用每一行只需使用:awk 'printf("\"%s\"\n", $0)' file【参考方案7】:

您的输入文件在行尾有回车符。您需要在文件上使用dos2unix 来删除它们。或者你可以这样做:

sed 's/\(.*\)\r/"\1"/g'

这将删除回车并添加引号。

【讨论】:

成功了!没错,文件来自windows,是在windows中生成的 很好的解决方案!你能解释一下 \r 和 "\1" 在这里做什么吗? @satch_boogie: \r 是回车。 \1 是由括号完成的捕获的内容(因此在这种情况下,是回车之前的整行)。结果是删除了回车并添加了引号。我认为最后的g (global) 是不必要的,但我的回答保留了 OP 的问题。有关捕获组的更多信息,请参阅this。

以上是关于如何设置awk识别双引号为一个字符的主要内容,如果未能解决你的问题,请参考以下文章

VBA中字符变量双引号如何去除?我的变量赋值使用时因为是字符变量自带了双引号导致赋值后无法识别

awk输出单引号,双引号

awk输出单引号,双引号

在awk中搜索带双引号的字符串

PHP 如何将单引号字符串与双引号字符串连接起来。

在AWK中输出特殊字符-单引号