我有一个看起来像这样的文件:
@"Afghanistan.png",
@"Albania.png",
@"Algeria.png",
@"American_Samoa.png",
我希望它看起来像这样
@"Afghanistan.png",
@"Afghanistan",
@"Albania.png",
@"Albania",
@"Algeria.png",
@"Algeria",
@"American_Samoa.png",
@"American_Samoa",
我以为可以使用sed来执行此操作,但是我不知道如何在缓冲区中存储某些内容然后进行修改。
我什至在使用正确的工具吗?
谢谢
最佳答案
使用sed相当容易,甚至不需要使用保持空间(sed辅助缓冲区)。鉴于以下input
文件:
$ cat input
@"Afghanistan.png",
@"Albania.png",
@"Algeria.png",
@"American_Samoa.png",
您应该使用以下命令:
sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
结果:
$ sed 's/@"\([^.]*\)\.png",/&\
@"\1",/' input
@"Afghanistan.png",
@"Afghanistan",
@"Albania.png",
@"Albania",
@"Algeria.png",
@"Algeria",
@"American_Samoa.png",
@"American_Samoa",
此命令仅是替换命令(
s///
)。它匹配以@"
开头,后跟非句点字符([^.]*
)然后是.png",
的所有内容。另外,它使用方括号.png",
和\(
匹配\)
之前的所有非句点字符,因此我们可以获得该组匹配的内容。因此,这是要替换的正则表达式:@"\([^.]*\)\.png",
因此,遵循命令的替换部分。
&
命令仅将与@"\([^.]*\)\.png",
匹配的所有内容插入更改的内容中。如果它是替换零件的唯一元素,则输出中不会有任何更改。但是,在&
后面有一个换行符-由反斜杠\
表示,后跟实际的换行符-并且在新行中,我们添加@"
字符串,后跟第一组的内容(\1
),然后是字符串",
。这只是该命令的简要说明。希望这可以帮助。另外,请注意,在某些版本的sed(例如GNU sed)中,可以使用
\n
字符串表示换行符。它将呈现出更简洁易读的命令:sed 's/@"\([^.]*\)\.png",/&\n@"\1",/' input
关于regex - 使用sed复制行并从重复项中删除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369047/