使用sed替换列字段分隔符

巴万

我有一个文本文件 1.txt:

cam:45c62741b9c99e1dcf3c140e8e3df635::dv:[email protected]:83.228.32.24
gamer:3dabd5bd7984b0286eba52d4a7db2dea:$Wm?1Z3MPErXl7%yk^Pc#%iu\9LFc{:[email protected]:93.182.154.63
:adc0a54f8d21694848200ae043fa99f2:GqJ:[email protected]:84.176.127.30
! Aa:da99417e29ab0aa67f97db64f091836b:k_P:[email protected]:82.179.236.154

我想将列分隔符(当前为':')更改为'|| o ||'。我只想更改第一,第三和第四列分隔符,因为第二列包含类似的内容hash:salt

我正在尝试的脚本是:

sed 's/:/||o||/1;s/:/||o||/2;s/:/||o||/2' 1.txt

唯一的问题是结果中的盐中包含“:”。我得到的输出是:

cam||o||45c62741b9c99e1dcf3c140e8e3df635:||o||dv||o||[email protected]:83.228.32.24
gamer||o||3dabd5bd7984b0286eba52d4a7db2dea:$Wm?1Z3MPErXl7%yk^Pc#%iu\9LFc{||o||[email protected]||o||93.182.154.63
||o||adc0a54f8d21694848200ae043fa99f2:GqJ||o||[email protected]||o||84.176.127.30
! Aa||o||da99417e29ab0aa67f97db64f091836b:k_P||o||[email protected]||o||82.179.236.154

输出的第一行是错误的。

Expected output :
cam||o||45c62741b9c99e1dcf3c140e8e3df635::dv||o||[email protected]||o||83.228.32.24

其余的输出是正确的。

我期望的是从正向替换第一':',第二次从后向替换,因此盐中的':'被忽略。

安德烈(Andrey Tyukin)

试试这个:

(?:^[^:]*\K:)|(:(?=[^:]+:?[^:]+$))

基本思路:

  • 要么获得:该行中出现的第一个
  • 否则:最多只能跟一个:

演示:regex101

带替换的演示:regex101

如何使用perl

perl -p -e 's/(?:^[^:]*\K:)|(:(?=[^:]+:?[^:]+$))/||o||/g' input.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用sed时日期字段之间的转义分隔符

如何使用awk从列中删除和替换字段分隔符?

替换CSV文件中的列逗号分隔符,并使用值前后的单引号处理字段

使用 sed 更改分隔符

使用`column -t`并替换分隔符

我如何使用〜作为分隔符使用sed查找和替换文本

用awk或sed更改一组特定列的字段分隔符

如何使用诸如perl或sed的命令行工具替换LaTex $分隔符?

使用带有不同分隔符的 Sed 替换整行

sed:使用§作为分隔符时替换表达式中的错误选项

如何使用awk或sed复制基于分隔符的列并拆分另一列?

检索fread使用的列分隔符

使用 Oracle SQL 替换字符串分隔符中的列值

分隔符被字段更改

awk:如何使用 [[ 和 ]] 作为字段分隔符/分隔符?

使用两种字段分隔符awk打印列

awk -cut如何使用字段分隔符删除第二列

使用sed用分隔符分割字符串

当分隔符也出现在文件中任何位置的字段数据中时,如何替换分隔符?

如何用sed替换特定位置由分隔符分隔的子字符串

如何使用分隔符分隔视图中的列元素?

python:使用字段分隔符打印单列

使用分隔符 Django 連接外鍵字段

使用分隔符打印struct中的字段列表

AWK:使用字段分隔符连接匹配模式

如何使用“:”作为AWK字段分隔符?

使用字段分隔符的SQL查询的concat结果

如何使用awk将空间用作字段分隔符?

如何使用“〜”作为AWK字段分隔符?