我有一个数据文件,需要删除连字符的几个uniq标识符。
所以我有:
(Special_Section "data-values")
我希望将其替换为:
(Special_Section "datavalues")
我想使用简单的sed find / replace,但每次数据和值都不同。最好是,我会在原地运行,因为该文件还有很多我想保持的其他信息。
sed或awk是否有办法仅从匹配部分删除连字符?
目前我可以匹配:sed -i 's/Special_Section "[a-zA-Z0-9]*-[a-zA-Z0-9]*"/&/g *myfiles*
但是我想在{&1}上运行s/-//
如果可能的话。
答案 0 :(得分:2)
你似乎正在使用GNU sed,所以这样的东西可能会起作用:
sed -ri '
s/(Special_Section [^-]*)-([^)]*)/\1\2/g
' <your_filename_glob>
答案 1 :(得分:1)
关闭 - 扫描线条,然后替换匹配的线条:
sed -i '/Special_Section "[a-zA-Z0-9]*-[a-zA-Z0-9]*"/s/\( "[a-zA-Z0-9]*\)-\([a-zA-Z0-9]*\)"/\1\2/' *myfiles*
您可以将其拆分为多行以避免SO中的滚动条:
sed -i '/Special_Section "[a-zA-Z0-9]*-[a-zA-Z0-9]*"/{
s/\( "[a-zA-Z0-9]*\)-\([a-zA-Z0-9]*\)"/\1\2/
}' *myfiles*
进一步的想法,你也可以这样做:
sed -i 's/\(Special_Section "[a-zA-Z0-9]*\)-\([a-zA-Z0-9]*"\)/\1\2/' *myfiles*
这更紧凑。如果需要,您可以添加g
限定符。两种解决方案都使用特殊的\(...\)
表示法来捕获正则表达式的部分内容。
答案 2 :(得分:1)
这有用吗?
sed -i '/(Special_Section ".*-.*")/{s/-//}' yourFile