[英]Using sed to replace a part of a string that is unknown
我有一个文本文件:
example.txt
UserName = JIU62H123;
USER_NAME = JIU62H123;
我需要将JIU62H123
更改为A5B4C6DF9
。 显然,对于此文件,我可以这样做:
//bash
sed -i '' 's/JIU62H123/A5B4C6DF9/g' example.txt
从结果中可以看出,这适用于此文件:
example.txt
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
但是,实际上,我不知道用户名是否真的提前。 我所知道的是文件的形状如下:
example.txt
UserName = <some_letters_and_numbers>;
USER_NAME = <some_letters_and_numbers>;
我基本上需要将<some_letters_and_numbers>
更改为A5B4C6DF9
。 可以使用一个或多个sed
命令完成此操作吗?
如何使用正则表达式?
sed -ir 's/^(USER_NAME|UserName) = [A-Za-z0-9]+;$/\1 = A5B4C6DF9;/g' example.txt
UserName
或USER_NAME
开头,后跟等号=
, sed
语法: 使用变量来适应
newId=A5B4C6DF9
sed -e '/^U\(serName\|\SER_NAME) *=/s/= .*$/'$newId/ -i example.txt
注意引用部分在变量之前!
直到$newId
都不包含特殊字符。 如果变量可以包含空格或其他非字母数字字符,请使用双引号:
sed -e '/^U\(serName\|\SER_NAME) *=/s/= .*$/'"$newId"/ -i example.txt
使用awk,您可以:
$ awk '{$3="A5B4C6DF9;"}1' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
即。 替换第三个空格分隔的字段。 使用最新的GNU awk,您可以进行就地编辑:
$ awk -i inplace '{$3="A5B4C6DF9;"}1' file
要将change <some_letters_and_numbers> to A5B4C6DF9
并假设您打算on the right side of "= "
带有on the right side of "= "
-E
on the right side of "= "
的sed的sed on the right side of "= "
添加on the right side of "= "
,这是针对ERE的:
$ sed -E 's/= [[:alnum:]]+/= A5B4C6DF9/' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
以及任何POSIX sed:
$ sed 's/= [[:alnum:]][[:alnum:]]*/= A5B4C6DF9/' file
UserName = A5B4C6DF9;
USER_NAME = A5B4C6DF9;
非常感谢您的回答,每个人都赞成。 我最终做了这样的解决方案:
sed -i '' -E 's/(DEVELOPMENT_TEAM|DevelopmentTeam)( = )(.*)/\1\2A5B4C6DF9;/' example.txt
此处给出的大多数答案似乎都与字母/数字模式匹配,但我认为最好将其与任何内容匹配并用所需的内容替换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.