Bash 如何获取文件中所有带引号的字符串?
我需要提取文件中所有用单引号括起来的字符串。例如,如果文件包含以下行:Bash 如何获取文件中所有带引号的字符串?,bash,awk,sed,Bash,Awk,Sed,我需要提取文件中所有用单引号括起来的字符串。例如,如果文件包含以下行: "Julius" was not "Ceaser" 它应该输出 Julius Ceaser 我想使用bash-Sed/Awk来完成它。使用Awk我可以提取一个事件,但是如何获取所有字符串 grep -Eo '"[a-zA-Z]+"' file 将在单独的行上打印匹配字符串,即使它们在原始文件的同一行上。如果要折叠火柴,可以执行以下操作: grep -nEo '"[a-zA-Z]+"' file | awk -F: '
"Julius" was not "Ceaser"
它应该输出
Julius
Ceaser
我想使用bash-Sed/Awk来完成它。使用Awk我可以提取一个事件,但是如何获取所有字符串
grep -Eo '"[a-zA-Z]+"' file
将在单独的行上打印匹配字符串,即使它们在原始文件的同一行上。如果要折叠火柴,可以执行以下操作:
grep -nEo '"[a-zA-Z]+"' file | awk -F: '
BEGIN { p=1 }
{
gsub("\"", "", $2)
n=$1;
if (p != n) {
print s; s = $2; p=n
} else {
if(s) { s = s" "$2 } else { s=$2 }
}
}
END {
print s
}'
grep-nEo只提取匹配的部分,行号前缀为
awk解析grep的输出并生成所需的结果
将在单独的行上打印匹配字符串,即使它们在原始文件的同一行上。如果要折叠火柴,可以执行以下操作:
grep -nEo '"[a-zA-Z]+"' file | awk -F: '
BEGIN { p=1 }
{
gsub("\"", "", $2)
n=$1;
if (p != n) {
print s; s = $2; p=n
} else {
if(s) { s = s" "$2 } else { s=$2 }
}
}
END {
print s
}'
grep-nEo只提取匹配的部分,行号前缀为
awk解析grep的输出并生成所需的结果
救命啊
$ awk -v RS='"' '!(NR%2)' file
Julius
Ceaser
使用此内容
$ cat file
我需要提取文件中所有用单引号括起来的字符串。例如,如果文件包含以下行:Julius
它不应该输出朱利叶斯·凯瑟吗
假设没有转义的引号。awk to the rescue
$ awk -v RS='"' '!(NR%2)' file
Julius
Ceaser
使用此内容
$ cat file
我需要提取文件中所有用单引号括起来的字符串。例如,如果文件包含以下行:Julius
它不应该输出朱利叶斯·凯瑟吗
假定没有转义引号。如果要在同一行中打印所有双引号字符串,请尝试使用此Perl one liner
perl -ne ' while(/("\S+")/g) { print "$1 " } print "\n" '
在给定的输入下
$ cat doubleq.txt
"Julius" was not "Ceaser"
"request" map url
"Ceaser"
$ perl -ne ' while(/("\S+")/g) { print "$1 " } print "\n" ' doubleq.txt
"Julius" "Ceaser"
"request"
"Ceaser"
$
如果要在同一行中打印所有双引号字符串,请尝试使用Perl one liner
perl -ne ' while(/("\S+")/g) { print "$1 " } print "\n" '
在给定的输入下
$ cat doubleq.txt
"Julius" was not "Ceaser"
"request" map url
"Ceaser"
$ perl -ne ' while(/("\S+")/g) { print "$1 " } print "\n" ' doubleq.txt
"Julius" "Ceaser"
"request"
"Ceaser"
$
如果您不介意输出中包含引号,那么简单的grep-o可能会起作用:
$ egrep -o '"[[:alnum:]]+"' <<<'"Julius" was not "Ceaser"'
"Julius"
"Ceaser"
如果您不介意输出中包含引号,那么简单的grep-o可能会起作用:
$ egrep -o '"[[:alnum:]]+"' <<<'"Julius" was not "Ceaser"'
"Julius"
"Ceaser"
单引号和双引号之间有一个重要的区别。你发布的是双引号。单引号和双引号之间有一个重要的区别。您发布的是双引号。如果一行有多个带引号的字符串,此解决方案将它们打印在不同的行上。不确定OP是否需要。也许,但问题是输出是如何显示的。如果一行有多个带引号的字符串,此解决方案将它们打印在不同的行上。不确定OP是否需要。也许吧,但问题是输出是如何显示的。您可能需要修剪引号。也可能[^]+更具包容性。您可能需要修剪引号。也许[^]+更具包容性。