Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed 从文件中提取数据_Sed_Grep_Unix - Fatal编程技术网

Sed 从文件中提取数据

Sed 从文件中提取数据,sed,grep,unix,Sed,Grep,Unix,我有一个文件results.txt,类似于: a.txt {some data} success!! b.txt {some data} success!! c.txt {some data} error!! 我想从中提取数据。我想要一个如下输出: a.txt: success b.txt: success c.txt: error 问题是{some data}部分可以任意长 如何做到这一点?cat results.txt|grep-E”(([a-z]\.txt)|((成功)|(错误)!

我有一个文件
results.txt
,类似于:

a.txt
{some data}
success!!

b.txt
{some data}
success!!

c.txt
{some data}
error!!
我想从中提取数据。我想要一个如下输出:

a.txt: success
b.txt: success
c.txt: error
问题是
{some data}
部分可以任意长


如何做到这一点?
cat results.txt|grep-E”(([a-z]\.txt)|((成功)|(错误)!!)“| tr-d'\n'| sed's/\不/'
应该这样做。不过,您可能必须用文字换行符替换
\n

$ cat file
a.txt
{some
  blah
data}
success!!

b.txt
{some data}
success!!

c.txt
{some data}
error!!

$ awk 'BEGIN{ FS="[{}]|\n";RS=""}{gsub(/!!/,"",$NF);print $1":"$NF}' file
a.txt:success
b.txt:success
c.txt:error
更新:

$ awk -vRS= -vFS="\n" '{print $1":"$NF}' file
a.txt:success!!
b.txt:success!!
c.txt:error!!
这对我很有用:

cat result.txt | xargs |sed 's/\ {[^}]*}/:/g' | sed 's/!! /\n/g'

a.txt: success
b.txt: success
c.txt: error!!
awk:


您也可以使用以下方法

sed -e 's/^{some data}$//g;/^$/d;' results.txt | sed '$!N;s/\n/: /'

你可能把他的花括号也照字面理解了:)是的,你可能是对的。但是谁知道呢,在任何情况下,都可以使用第二个版本。为什么需要以“state=0”开头?无法直接以/.txt/事件开始?可能,但我不想冒险。
sed -e 's/^{some data}$//g;/^$/d;' results.txt | sed '$!N;s/\n/: /'
awk '{print $1": "$4}' RS="\n\n" results.txt