Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 替换命令,除非条件_Regex_Bash_Sed - Fatal编程技术网

Regex 替换命令,除非条件

Regex 替换命令,除非条件,regex,bash,sed,Regex,Bash,Sed,我正在进行一些数据清理,我需要运行一个bash脚本,它基本上可以: 将每个:替换为:“ 我是用sed-I-e的/:/“:”/g“filename完成的 问题是,除非是时间数据,否则必须对行中的每个事件执行此操作 例如,如果我的线路是 VolumeId:vol-c29a6e96, Size:8, timestamp:Thu Jan 09 13:44:02 UTC 我希望这样 VolumeId":"vol-c29a6e96, Size":"8, timestamp":"Thu Jan 09 1

我正在进行一些数据清理,我需要运行一个bash脚本,它基本上可以:

  • 将每个:替换为
    :“
我是用sed-I-e的/:/“:”/g“filename完成的

问题是,除非是时间数据,否则必须对行中的每个事件执行此操作

例如,如果我的线路是

VolumeId:vol-c29a6e96, Size:8, timestamp:Thu Jan 09 13:44:02 UTC
我希望这样

VolumeId":"vol-c29a6e96, Size":"8, timestamp":"Thu Jan 09 13:44:02 UTC
因此,我不希望每次数据的格式为digit:digit时都应用sed命令 我该怎么做?(无需sed命令)


感谢您的帮助

因为您对非sed选项是开放的,这里有一个使用
perl的选项(由于前瞻性支持):

s='VolumeId:vol-c29a6e96,大小:8,时间戳:Thu Jan 09 13:44:02 UTC'
perl-pe的/(?另一个perl命令

$ perl -pe 's/\d{2}:\d{2}:\d{2}(*SKIP)(*F)|:/":"/g' file
VolumeId":"vol-c29a6e96, Size":"8, timestamp":"Thu Jan 09 13:44:02 UTC

这个
\d{2}:\d{2}:\d{2}(*SKIP)(*F);:
将完全跳过所有时间戳字符串,并从剩余字符串中匹配
。只需将匹配的
替换为
:“
,将为您提供所需的输出。

sed答案:将时间戳中的冒号更改为其他字符,替换所有冒号,然后恢复时间戳中的冒号

echo "VolumeId:vol-c29a6e96, Size:18, timestamp:Thu Jan 09 13:44:02 UTC" | 
sed -r '
    s/([[:digit:]]{2}):([[:digit:]]{2}):([[:digit:]]{2})/\1T\2T\3/g
    s/:/":"/g
    s/([[:digit:]]{2})T([[:digit:]]{2})T([[:digit:]]{2})/\1:\2:\3/g
'

+1对依赖perl正则表达式的实验特性有所保留
echo "VolumeId:vol-c29a6e96, Size:18, timestamp:Thu Jan 09 13:44:02 UTC" | 
sed -r '
    s/([[:digit:]]{2}):([[:digit:]]{2}):([[:digit:]]{2})/\1T\2T\3/g
    s/:/":"/g
    s/([[:digit:]]{2})T([[:digit:]]{2})T([[:digit:]]{2})/\1:\2:\3/g
'
VolumeId":"vol-c29a6e96, Size":"18, timestamp":"Thu Jan 09 13:44:02 UTC