我有一个输入文件 1.txt
joshwin_xc8@yahoo.com:1802752:2222:
ihearttofurkey@yahoo.com:1802756:111113
www.rothmany@mail.com:xxmyaduh:13@;:3A
我想要一个输出文件: out.txt
joshwin_xc8@yahoo.com||o||1802752||o||2222:
ihearttofurkey@yahoo.com||o||1802756||o||111113
www.rothmany@mail.com||o||xxmyaduh||o||13@;:3A
我想替换前两个':'在1.txt中使用' || o ||',但使用我正在使用的脚本
awk -F: '{print $1,$2,$3}' OFS="||o||" 3.txt
但它没有给出预期的输出。 任何帮助都将受到高度赞赏。
答案 0 :(得分:4)
Perl解决方案:
private myMethod(): void {
return this.testService.testMethod()
.then((response: string) => {
this.selected = response;
})
.catch(error => this.logger.error(error, this));
}
perl -pe 's/:/||o||/ for $_, $_' 1.txt
逐行读取输入并在处理后打印每一行-p
类似于您可能从sed s///
为以下列表中的每个元素运行上一个命令for
保持正在处理的行对于更高的数字,您可以使用$_
,其中N是数字。例如,要替换前7次出现:
for ($_) x N
答案 1 :(得分:3)
关注sed
也可以帮助您。
sed 's/:/||o||/;s/:/||o||/' Input_file
说明: 简单地用||o||
替换第一次出现的冒号,然后第二次出现冒号现在变为第一次出现冒号并用{替换该冒号{1}}根据OP的要求。
答案 2 :(得分:0)
Perl解决方案,但我认为这个想法可以适用于其他语言:使用split的limit参数:
perl -nE 'print join q(||o||), split q(:), $_, 3' file
(q引用,因为我在Windows上)
答案 3 :(得分:0)
假设我们需要替换前两次出现:使用下面的代码
像这样,您可以根据自己的要求进行更改,假设您需要更改前7次出现的更改{1..2}更改为{1..7}。
输出将保存在原始文件中。它不会显示输出
for i in {1..2}
> do
> sed -i "s/:/||o||/1" p.txt
> done