我有一个以分号分隔的播放列表,格式如下:
Thåström ; Stjärna som är din ; Skebokvarnsv. 209
;
我想用破折号 (-)替换第一个,;
用字符串“- Album: ”替换第二个
我正在尝试以下构造,但它不正确:
sed 's/\;/\-/1;s/\;/\-\ Album\:/2'
布尔结果是:
Thåström - Stjärna som är din ; Skebokvarnsv. 209
我知道错误的部分在第一段,因为如果我只运行,sed 's/\;/\-\ "Album\:"/2'
我会在行尾得到正确的结果:
Thåström ; Stjärna som är din - Album: Skebokvarnsv. 209
任何帮助深表感谢!
我在 MacOS 13.5.2 中的普通“sed”上运行它
我认为你已经非常接近拥有你想要的了。我采用的构造仅使用命令行上指定的两个表达式。
-f <command_file>
如果您愿意,您也可以将它们放入文件中并使用该选项第一个表达式将用该行的第一个分号进行替换。第二个表达式改变下一个。由于它们是按顺序处理的,因此我不必像示例那样担心在末尾指定数字标志。
使用额外的空行来分隔输出的示例。
ETA:在您的原始示例中,第二个表达式具有 a
2
作为标志。这将取代第二个;
。但是,您的第一个替换替换了第一个;
,因此您的命令尝试替换该行中的第三个。;
如果你只是放弃它,2
它应该按你的预期工作。使用
gawk
:要将相同的模式多次替换为不同的字符串,则可以使用以下方法。
使用Raku(以前称为 Perl_6)
Raku 是 Perl 编程语言家族中的一种编程语言。上面您使用了
-ne
逐行非自动打印命令行标志,并且只需执行两次连续S///
替换,然后执行 output
。该put
调用会在行尾添加换行符。输入示例:
示例输出:
Raku真正好的方面是它支持 Unicode。因此,您可以使用 Unicode 特征来过滤和/或替换您的文本:
输入示例:
示例输出:
上面,三个 Runic 字母被插入到示例输入中。Raku 正则表达式可以根据字符的Unicode 脚本名称(在本例中)来识别和/或过滤掉字符
<:Script<Runic>>
。尽管 StackOverflow 似乎无法显示它们,但符文字母已正确替换为 Unicode⁒
“商业减号”( U+2052 )。https://www.unicode.org/charts/PDF/U16A0.pdf
https://docs.raku.org/language/regexes
https://raku.org