我研究了这里的其他问题,但还没有找到一个真正适合我的。我试图从文件中选择一个特定的行,并用另一个字符串替换该行中的字符串。所以我有一个名为my_course的文件。我试图修改my_course中以“123”开头的一行。在该行中,我想用“1 "替换字符串“0”。帮助?
qxgroojn1#
一种可能是使用sed:
sed '/^123/ s/0/1/' my_course
/../
^123
s/from/to/
请注意,默认情况下,替换后文件将被写入stdout。您可能需要:
... > my_new_course
-e
如果你使用的是破坏性的原地变量,你可能需要使用-iEXTENSION,另外还需要保留一个原始版本的给定扩展的副本,以防出现问题。
-iEXTENSION
**EDIT:**要将所需的行与存储在变量中的前缀匹配,您必须用双引号将sed脚本括起来",因为使用单引号'将防止变量扩展:
"
'
sed "/^$input/ s/0/1/" my_course
egmofgnx2#
你试过这个吗:sed-e '[行] s/旧字符串/新字符串/'我的课程附言:[]不应该用,是不是只是为了说明你应该把数字放在"s"的前面。干杯!实际上,本例中的-e不是必需的,我可以只写
sed '<line number>s/<old string>/<new string>/' my_course
eufgjt7s3#
这就是我在Fedora 36,GNU bash,版本5.2.15(1)-release(x86_64-redhat-linux-gnu)上的工作:
sed -i '1129s/additional/extra/' en-US/Design.xml
我知道你说过你不能用行号;我不知道如何处理这一部分,但这将该文件第1129行的“additional”替换为“extra”。
3条答案
按热度按时间qxgroojn1#
一种可能是使用sed:
/../
部分中,您只需为以123开头的行指定要查找^123
的模式。s/from/to/
部分中,您已经指定了要执行的替换。请注意,默认情况下,替换后文件将被写入stdout。您可能需要:
... > my_new_course
重定向输出-e
开关执行到sed的“就地”替换如果你使用的是破坏性的原地变量,你可能需要使用
-iEXTENSION
,另外还需要保留一个原始版本的给定扩展的副本,以防出现问题。**EDIT:**要将所需的行与存储在变量中的前缀匹配,您必须用双引号将sed脚本括起来
"
,因为使用单引号'
将防止变量扩展:egmofgnx2#
你试过这个吗:sed-e '[行] s/旧字符串/新字符串/'我的课程
附言:[]不应该用,是不是只是为了说明你应该把数字放在"s"的前面。
干杯!
实际上,本例中的-e不是必需的,我可以只写
eufgjt7s3#
这就是我在Fedora 36,GNU bash,版本5.2.15(1)-release(x86_64-redhat-linux-gnu)上的工作:
我知道你说过你不能用行号;我不知道如何处理这一部分,但这将该文件第1129行的“additional”替换为“extra”。