使用bash解析文件,如果它与模式不匹配,则为每一行附加前缀

时间:2016-01-22 08:51:00

标签: bash

我想解析看起来像这样的文件的每一行:

www.hello.by
https://www.google.com
http://www.stackoverflow.com
www.fedia.com

如果不是http://http://

,我希望我的脚本会在每一行附加https://

3 个答案:

答案 0 :(得分:2)

你有没有尝试过这个?它非常简单..

您只需要逐行读取文件。你可以这样做:

while read line ; do
    echo $line
done < your_file

然后你必须检查你的行是否以http://或https://:

开头
if [[ $line =~ ^https?:// ]] ; then
    echo $line
fi

..如果没有,则添加http:

if [[ $line =~ ^https?:// ]] ; then
    echo $line
else
    echo http://$line
fi

总结你得到:

while read line ; do                                                                                                                                                                                        
    if [[ $line =~ ^https?:// ]] ; then                                                                                                                                                                     
        echo $line                                                                                                                                                                                          
    else                                                                                                                                                                                                    
        echo http://$line                                                                                                                                                                                   
    fi                                                                                                                                                                                                      
done < your_file  

您可能希望保存对文件的更改,然后将输出重定向到临时文件,最后用它替换现有文件:

while read line ; do                                                                                                                                                                                        
    if [[ $line =~ ^https?:// ]] ; then                                                                                                                                                                     
        echo $line                                                                                                                                                                                          
    else                                                                                                                                                                                                    
        echo http://$line                                                                                                                                                                                   
    fi                                                                                                                                                                                                      
done < data > data.tmp                                                                                                                                                                                                                                                                                                                                                                                  
mv data{.tmp,}   

替代awk版本:

awk '{if($0 ~ /^https?/) print; else print "http://"$0}' data

修改文件:

awk '{if($0 ~ /^https?/) print; else print "http://"$0}' your_file  > your_file.tmp ; mv your_file{.tmp,} 

答案 1 :(得分:1)

使用sed

sed '\|^https\{0,1\}://|!s,^,http://,' file

http://www.hello.by
https://www.google.com
http://www.stackoverflow.com
http://www.fedia.com

答案 2 :(得分:1)

尝试以下sed命令

sed -i '/https\?:\/\//{t;}
s/^/http:\/\//
' YOUR_FILE