sed或grep或awk匹配非常长的行

时间:2010-05-31 11:48:40

标签: perl sed awk grep

更多文件

param1=" 1,deerfntjefnerjfntrjgntrjnvgrvgrtbvggfrjbntr*rfr4fv*frfftrjgtrignmtignmtyightygjn      2,3,4,5,6,7,8, 
rfcmckmfdkckemdio8u548384omxc,mor0ckofcmineucfhcbdjcnedjcnywedpeodl40fcrcmkedmrikmckffmcrffmrfrifmtrifmrifvysdfn drfr4fdr4fmedmifmitfmifrtfrfrfrfnurfnurnfrunfrufnrufnrufnrufnruf"****

需要将param1的内容与

匹配
sed -n "/$param1/p" file 

但因为线长(非常长的线)我不能匹配线 什么是匹配很长线的最佳方法?

2 个答案:

答案 0 :(得分:1)

您面临的问题是param1包含由sed解释的特殊字符。星号('*')用于表示“前一个字符出现零次或多次”,因此当sed解释此字符时,没有任何内容可以与您要查找的文字星号相匹配。

以下是一个有用的bash脚本:

#!/bin/bash

param1=' 1,deerfntjefnerjfntrjgntrjnvgrvgrtbvggfrjbntr\*rfr4fv\*frfftrjgtrignmtignmtyightygjn 2,3,4,5,6,7,8, rfcmckmfdkckemdio8u548384omxc,mor0ckofcmineucfhcbdjcnedjcnywedpeodl40fcrcmkedmrikmckffmcrffmrfrifmtrifmrifvysdfn'

cat <<EOF | sed "s/${param1}/Bubba/g"
 1,deerfntjefnerjfntrjgntrjnvgrvgrtbvggfrjbntr*rfr4fv*frfftrjgtrignmtignmtyightygjn 2,3,4,5,6,7,8, rfcmckmfdkckemdio8u548384omxc,mor0ckofcmineucfhcbdjcnedjcnywedpeodl40fcrcmkedmrikmckffmcrffmrfrifmtrifmrifvysdfn    
EOF

答案 1 :(得分:1)

也许问题是你的$param1包含特殊字符?这对我有用:

A="$(perl -e 'print "a" x 10000')"
echo $A | sed -n "/$A/p"

$A包含10 000个a字符。

echo $A | grep -F $A

echo $A | grep -P $A

也可以工作(第二个需要内置PCRE支持的grep。如果你想要模式匹配,你应该使用this或pcregrep。如果你不这样做,使用固定的grep(grep -F))。

echo $A | grep $A

太慢了。