[英]Using sed to match a pattern and deleting from the line to the end of the file
[英]pattern match and add line at the end or start of a line in a text file using sed
我有一个文本文件,其中包含:
First link https://cdn.shopify.com/s/files/1/0151/0741/products/2c60070615ceaa44c934ca876fe4ccc0_f304e840-bb1d-4bcf-a993-d966c0b99ae3.jpeg?v=1452842355
Second link https://cdn.shopify.com/s/files/1/0151/0741/products/549542c704da78a0e5208b9f8c2cd26e.jpeg?v=1452842263
Third link https://cdn.shopify.com/s/files/1/0151/0741/products/2c60070615ceaa44c934ca876fe4ccc0_70e7e6b9-bedd-40a7-b322-542facf94c05.jpeg?v=1452842230
Fourth link https://cdn.shopify.com/s/files/1/0151/0741/products/2c60070615ceaa44c934ca876fe4ccc0_5485fd04-c852-4fd7-b142-92595329568a.jpeg?v=1452841841
lst link https://cdn.shopify.com/s/files/1/0151/0741/products/2c60070615ceaa44c934ca876fe4ccc0_fb613b45-fbbb-4b6d-b9c0-45d7f069879e.jpeg?v=1452841831
我想匹配最后一个网址,并使用sed在行的开头或结尾附加一个单词。
但这是行不通的。 救命
命令的输出给出此错误。
$sed -e 's_https://cdn.shopify.com/s/files/1/0151/0741/products/2c60070615ceaa44c934ca876fe4ccc0_f304e840-bb1d-4bcf-a993-d966c0b99ae3.jpeg\?v=1452842355 .*_& NOTFOUND_'
sed: -e expression #1, char 148: unknown option to `s'
不幸的是, sed
不是执行此任务的最佳工具。 如果没有事先进行所有转义,就无法以sed模式传递普通的非正则表达式字符串。
最好使用awk
:
awk 'index($0, "https://cdn.shopify.com/s/files/1/0151/0741/products/2c60070615ceaa44c934ca876fe4ccc0_fb613b45-fbbb-4b6d-b9c0-45d7f069879e.jpeg?v=1452841831"){
$0 = $0 " NOTFOUND"} 1' file
index
函数只是在记录中搜索给定URL的存在,如果找到,则会在末尾附加" NOTFOUND
字符串" NOTFOUND
。
等效的sed将是这样的:
sed 's~https://cdn\.shopify\.com/s/files/1/0151/0741/products/2c60070615ceaa44c934ca876fe4ccc0_fb613b45-fbbb-4b6d-b9c0-45d7f069879e\.jpeg?v=1452841831.*~& NOTFOUND~' file
如您所见,它要求您转义所有DOT并选择输入字符串中不存在的正则表达式定界符。
当字符显示在URL中时,为什么要使用_
作为正则表达式分隔符?
[..snip..]/products/2c60070615ceaa44c934ca876fe4ccc0_fb613b45-fb
^---
您实际上在做
s/.../f
f
是s/
正则表达式的未知修饰符。
该模式具有下划线...fe4ccc0_f304...
,用作下划线命令的定界符。 使用其他在模式或替换字符串中没有出现转义的定界符。
尝试使用|
字符代替,如s|http://... .*$|& NOT_FOUND|
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.