java文本的查找与替换_通过Bash命令在文本文件中查找和替换

查找和替换给定输入字符串(例如abc )并替换为另一个字符串(例如文件/tmp/file.txt XYZ的最简单方法是什么?

我正在编写一个应用程序,并使用IronPython通过SSH执行命令-但我不太了解Unix,也不知道要寻找什么。

我听说Bash除了是命令行界面之外,还可以是一种非常强大的脚本语言。 因此,如果这是真的,我假设您可以执行类似的操作。

我可以用bash做到吗,实现我的目标最简单的脚本(一行)是什么?

#1楼

找到了这个线程,我同意它包含最完整的答案,所以我也添加了我的:

1)sed和ed非常有用...用手! 从@Johnny看下面的代码:

sed -i -e 's/abc/XYZ/g' /tmp/file.txt

2)当我的限制是要通过shell脚本使用它时,不能在内部使用任何变量代替abc或XYZ! 这似乎至少符合我的理解。 因此,我不能使用:

x='abc'

y='XYZ'

sed -i -e 's/$x/$y/g' /tmp/file.txt

#or,

sed -i -e "s/$x/$y/g" /tmp/file.txt

但是,我们该怎么办? 因为,@ Johnny说使用“读的时候...”,但是不幸的是,这还不是故事的结局。 以下内容对我来说效果很好:

#edit user's virtual domain

result=

#if nullglob is set then, unset it temporarily

is_nullglob=$( shopt -s | egrep -i '*nullglob' )

if [[ is_nullglob ]]; then

shopt -u nullglob

fi

while IFS= read -r line; do

line="${line//''/$server}"

line="${line//''/$alias}"

line="${line//''/$user}"

line="${line//''/$group}"

result="$result""$line"'\n'

done < $tmp

echo -e $result > $tmp

#if nullglob was set then, re-enable it

if [[ is_nullglob ]]; then

shopt -s nullglob

fi

#move user's virtual domain to Apache 2 domain directory

......

3)正如可以看到是否设置了nullglob的情况,当存在一个包含*的字符串时,它的行为很奇怪

ServerName www.example.com

变成

没有结尾尖括号,Apache2甚至无法加载!

4)这种解析应该比一键搜索和替换要慢,但是,正如您已经看到的,对于4个不同的搜索模式,有4个变量在一个解析周期内起作用!

在给定的问题假设下,我能想到的最合适的解决方案。

#2楼

我很惊讶,因为我偶然发现了这个...

软件包“ mysql-server”附带了一个“ replace”命令,因此,如果已安装,请尝试一下:

# replace string abc to XYZ in files

replace "abc" "XYZ" -- file.txt file2.txt file3.txt

# or pipe an echo to replace

echo "abcdef" |replace "abc" "XYZ"

看到男人替换更多关于这个...

#3楼

您可以使用rpl命令。 例如,您想在整个php项目中更改域名。

rpl -ivRpd -x'.php' 'old.domain.name' 'new.domain.name' ./path_to_your_project_folder/

原因尚不清楚,但这是非常快速和有用的。 :)

#4楼

要非交互地编辑文件中的文本,您需要就地文本编辑器,例如vim。

这是如何从命令行使用它的简单示例:

vim -esnc '%s/foo/bar/g|:wq' file.txt

这相当于前编辑器的@slim答案 ,基本上是同一回事。

这里有几个ex的实际例子。

用文件中的bar替换文本foo :

ex -s +%s/foo/bar/ge -cwq file.txt

删除多个文件的尾随空格:

ex +'bufdo!%s/\s\+$//e' -cxa *.txt

故障排除(端子卡住时):

添加-V1参数以显示详细消息。

强制退出者: -cwq! 。

也可以看看:

#5楼

如果将URL替换为“ /”字符,请小心。

如何执行此操作的示例:

sed -i "s%http://domain.com%http://www.domain.com/folder/%g" "test.txt"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值