shell脚本字符串替换
A. shell脚本定位某个文件中特定位置的字符串并进行替换应该怎么写
根据位置替换即可:
readip
sed-ri"/subnet/s/(subnet)[^]+(netmask.*)/1$ip2/"/mnt/file
/subnet/ -先正则匹配到含有subnet的行,然后替换。
替换的时候将不变的部分用小括号括起来,后面依次用1 , 2 原封不动地引用回来。
-r 选项用于支持扩展正则,这样就不需要额外的转义符。
[^] 表示不为空格的任意一个字符,+ 表示重复该字符至少1次。
B. shell脚本 批量替换多个文件中指定字符之间的字符串中的指定字符
用Replace
Pioneer处理很轻松,找到")"和"("之间的内容,把"、"替换成"|"就可以了。
需要说明的是,你的括号是中文括号"()"而不是英文括号"()",所以不用转义。
以下是详细步骤:
1.
ctrl-o打开待处理txt文件
2.
ctrl-h打开replace窗口
*
在Search
for
pattern下面输入:
"(^|)).*?((|$)"(不包含左右的双引号)
*
在Replace
with
pattern下面输入:
"replace($match,'、','|')"(不包含左右的双引号)
3.
点击Replace,完成。
****************
另外,这里再给你一个纯正则表达式的版本:
把"、(?=[^)]*((|$))"替换成"|"就可以了。
你也可以在Replace
Pioneer的search
for
pattern输入"、(?=[^)]*((|$))"(无双引号),然后在replace
with
pattern输入|就可以了。
C. Shell脚本:${...}在字符串中的多种用法
1、${var}
限定变量。
如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定。
如果变量名不会产生歧义时(即独立的变量名),${var}与$var没有任何区别。
var="hello"
var_01="hello01"
echo $var $var_01 ${var}_01
>>> hello hello01 hello_01
2、${#var}
得到变量var的长度
var="hello"
echo ${#var}
>>> 5
3、${var#}
删除变量首部的字符(串),
"#"后面的可以是字面串,也可以是正则表达式(惰性匹配)。
var="hello"
echo ${var#he}
>>> llo
var="/res_pos/path/from/something"
echo ${var#/}
>>> res_pos/path/from/something # 删除第一个"/"
echo ${var#/*/}
>>> path/from/something # 删除首部匹配"/*/"的串,即"/res_pos/"
4、${var##}
删除变量首部的字符(串),
只是,当使用2个"##"时,匹配是贪婪的(贪婪匹配,也就是尽可能多的匹配)。
echo ${var##/*/}
>>> something # 删除首部匹配"/*/"的串,即"/res_pos/path/from/"。
5、${var%}
删除变量尾部的字符(串),
"%"后面的可以是字面串,也可以是正则表达式(惰性匹配)。
var="hello"
echo ${var%llo}
>>> he
var="~/res_pos/path/from/something"
echo ${var%/*}
>>> ~/res_pos/path/from # 删除尾部的"/something"
6、${var%%}
删除变量尾部的字符(串),
只是,当使用2个"%%"时,匹配是贪婪的(对应于第4条)
var="~/res_pos/path/from/something"
echo ${var%/*}
>>> ~ # 删除第一个的"/"后的所有所有内容(包括"/"),贪婪匹配中,"/*"就是"/"后的所有字符串
7、${var::}
跟python的切片概念相似,取变量var的起始索引,
指定长度的子串(${var:索引:长度})。
var="~/res_pos/path/from/something"
echo ${var:0:5}
>>> ~/res
echo ${var:1:5}
>>> /res_ # 可见,字符串的索引是从0开始的
echo ${var::5}
>>> ~/res # 省略"索引",默认为从0开始
echo ${var:1:}
>>> # 省略"长度",默认长度为0,所以输出为空
8、${var//}
字符串替换。
将var中的字符串A替换成字符串B(${var/A/B})。
var="hello world"
echo ${var/hello/hi}
>>> hi world # 字符串"hello"替换成了"hi"
echo ${var/l/X}
>>> heXlo world # 第一个"l"替换成了"X"
9、${var///}
字符串替换,
与第8点相同,只不过,现在是将所有出现的串A替换成串B(${var//A/B})。
var="hello world"
echo ${var//l/X}
>>> heXXo worXd # 所有的"l"都替换成了"X"
10、${var/#/}
替换字符串首部的串A为串B,
(${var/#A/B}),与第8点不同的是,这里只替换首部的串A。
var="hello world. hello baby."
echo ${var//h/H}
>>> Hello world. Hello baby. # 将所有"h"替换成了"H"
echo ${var/#h/H}
>>> Hello world. hello baby. # 将首部的"h"替换成了"H"
echo ${var/e/E}
>>> hEllo world. hello baby. # 将第一个出现的"e"替换成了"E"
echo ${var/#e/E}
>>> hello world. hello baby. # 首字符不是"e",所以没有进行任何替换,原样输出。
11、${var/%/}
替换字符串尾部的串A为串B,
(${var/%A/B}),与第10点相似,只是这是处理的是字符串尾。
var="hello hello"
echo ${var/%o/END}
>>> hello hellEND # 将尾部的字符"o",替换成了"END"。
D. 在shell bash脚本里,如何把一个字符串中的回车转成其他字符
假设 s 是含回车的字符串
echo$s|tr' '' '
能够将回车转成 Tab。 可以换成你想要字符。
E. macosx系统 如何编写一个shell脚本替换文件中多行中的特定字符串
sed -i '' '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' yourfile
mac 上要求你必须对修改的文件进行备份,因此需要你这样写代码
sed -i 'yourfile.back' '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' yourfile
如果你不需要备份文件则直接将"yourfile.back"留空即可
F. shell脚本sed命令如何使用变量替换掉包含指定字符串的整行
#先将包含指定字符串的整行打印到变量tmp
tmp=$(sed -n '/${zip}/p' 文本名)
#然后将文本中这一整行字符串替换为你想要修改的字符串
sed -i 's/${tmp}/${zip}/g' 文本名
G. 请问怎么在shell脚本中,替换文件多行里面的指定字符串
sed-i'/aaa/{:a;n;s/123/xyz/g;/eee/!ba}'yourfile先匹配aaa,匹配到后执行大括号里的语句。
n 读取下一行
s/123/xyz/g 将123替换为xyz,全局替换,同一行中出现几次替换几次
:a 设定跳转标签a
/eee/!ba 若当前行匹配不上eee,则跳转到标签a处继续执行,构成一个循环。若匹配到eee,则退出循环,sed重新对读入的每行匹配aaa。
由于sed没有加-n静默选项,所以默认对每行数据处理后都打印。
H. shell脚本,正则表达式,如何批量替换多个文件夹中指定字符中的指定字符
用Replace Pioneer处理很轻松,找到")"和"("之间的内容,把"、"替换成"|"就可以了。 需要说明的是,你的括号是中文括号"()"而不是英文括号"()",所以不用转义。 以下是详细步骤: 1. ctrl-o打开待处理txt文件 2. ctrl-h打开replace窗口 * 在Search for pattern下面输入: "(^|)).*?((|$)"(不包含左右的双引号) * 在Replace with pattern下面输入: "replace($match,'、','|')"(不包含左右的双引号) 3. 点击Replace,完成。 **************** 另外,这里再给你一个纯正则表达式的版本: 把"、(?=[^)]*((|$))"替换成"|"就可以了。 你也可以在Replace Pioneer的search for pattern输入"、(?=[^)]*((|$))"(无双引号),然后在replace with pattern输入|就可以了。
I. 怎么使用shell脚本将,每行前两个字符串去替换这一行的说有“;” 呢
虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字for-loop表达式查看一个字符串行表(字符串用空格分隔)然后将其赋给一个变量:for var in.;do.
J. linux shell 脚本中怎样将字符串转化为命令
1.没必要这样。因为shell脚本执行的时候是在一个子shell中执行的,即使你成功的将字符串转化为命令,你也不会因为脚本执行“cd /home”而在本shell中切换到/home下。……额,是不是说的绕了。。。
2.倘若按照你的想法,那就是一个新shell了。话句话说,你觉得像bash、sh、csh等等这些shell难道仅仅是一个脚本吗?再换句话说,难道bash仅仅是在sh的一个脚本吗?……
=====
3.假如真的需要在使用脚本的时候让使用者自己输入需要脚本执行的命令,只能用选择语句或者判断语句来匹配使用者的输入。因为使用者在使用脚本时输入给脚本的“命令”从根本上讲并不是命令,对脚本而言它仅仅是一个执行过程中的“选项”。好比“(1)删除(2)增加(3)退出... 请输入选项:”这种最平常的方式,拓展开也就是把提示去掉变成“请输入命令:”,而在使用者输入之后脚本用 if 删除==输入字符串 then 。。。这样的方式来满足需求。
======
没了。
