更多文件
param1=" 1,deerfntjefnerjfntrjgntrjnvgrvgrtbvggfrjbntr*rfr4fv*frfftrjgtrignmtignmtyightygjn 2,3,4,5,6,7,8,
rfcmckmfdkckemdio8u548384omxc,mor0ckofcmineucfhcbdjcnedjcnywedpeodl40fcrcmkedmrikmckffmcrffmrfrifmtrifmrifvysdfn drfr4fdr4fmedmifmitfmifrtfrfrfrfnurfnurnfrunfrufnrufnrufnrufnruf"****
需要将param1的内容与
匹配sed -n "/$param1/p" file
但因为线长(非常长的线)我不能匹配线 什么是匹配很长线的最佳方法?
答案 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
太慢了。