Regex sed中两个令牌之间的全局转换
我的问题似乎很简单,但我发现转换为sed表达式非常困难 我需要在文件中的某些标记之间加下划线。因此,如果行中有标记Regex sed中两个令牌之间的全局转换,regex,sed,Regex,Sed,我的问题似乎很简单,但我发现转换为sed表达式非常困难 我需要在文件中的某些标记之间加下划线。因此,如果行中有标记:和=,我需要将这两个标记之间的“多单词名称”转换为“多单词名称” 我知道在标记之间进行两步匹配,然后用下划线全局替换空格是相当容易的,但我找不到一种方法来保留行中不匹配的部分,以便写回文件。您可以通过两次调用sed: echo 'pre with space :multi word name=post with space' \ | sed 's/[:=]/\n&/g' |
:
和=
,我需要将这两个标记之间的“多单词名称”转换为“多单词名称”
我知道在标记之间进行两步匹配,然后用下划线全局替换空格是相当容易的,但我找不到一种方法来保留行中不匹配的部分,以便写回文件。您可以通过两次调用
sed
:
echo 'pre with space :multi word name=post with space' \
| sed 's/[:=]/\n&/g' | sed '/^:/s/ /_/g' | tr -d '\n'
要在文件上执行此操作,您可以执行以下操作(在bash中):
您可以通过两次调用
sed
:
echo 'pre with space :multi word name=post with space' \
| sed 's/[:=]/\n&/g' | sed '/^:/s/ /_/g' | tr -d '\n'
要在文件上执行此操作,您可以执行以下操作(在bash中):
这可能适合您(GNU-sed、tr和bash):
这可能适合您(GNU-sed、tr和bash):
行是否可以包含多对
:
和=
令牌?行是否可以包含多对:
和=
令牌?“仅使用sed”仅使用sed
awk -F '[:=]' '{ gsub(" ", "_", $2); print $1 ":" $2 "=" $3 }' infile
sed 's/:[^=]*=/$(tr " " "_" <<<"&")/g;s/.*/echo "&"/e' file
sed ':a;/:[^_=]*=/!b;s//\n&\n/;h;s/.*\n\(.*\)\n.*/\1/;y/ /_/;H;g;s/\n.*\n\(.*\)\n\(.*\)/\2\1/;ta' file