当前位置:首页 » 编程软件 » shell脚本sed

shell脚本sed

发布时间: 2023-06-06 01:37:17

1. shell脚本sed命令如何使用变量替换掉包含指定字符串的整行

#先将包含指定字符串的整行打印到变量tmp
tmp=$(sed -n '/${zip}/p' 文本名)
#然后将文本中这一整行字符串替换为你想要修改的字符串
sed -i 's/${tmp}/${zip}/g' 文本名

2. 使用shell脚本替换与更新文件里的一段内容,可以使用sed, awk等Linux工具

我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:

1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;

2)将要添加的内容根据变量值展开,附加写入tmp文件;

3)截取test.xml文件</abcdef>行到结束行,附加写入tmp文件。

4)移动tmp文件覆盖test.xml文件。

代码:

#!/bin/sh
$hostnames="host1,host2,host3..."
$paragraph="many_strings"
sed-n'1,/^<abcdef>/p'test.xml>tmp
cat<<EOF>>tmp
forhnamein`echo"$hostnames"|tr','''`
do
insert$hname
insert$paragraph
done
EOF
sed-n'/^</abcdef>/,$p'test.xml>>tmp
mvtmptest.xml

注意:

1) for a in b 结构中,b集合里的内容必需要空格分隔。所以我这里做了转换,用tr命令将逗号分隔改为了空格分隔。

2)第二个EOF必需顶格写,前面不能有空格。

3. sed问题。shell脚本下的sed有点奇怪,求解答

#!/bin/bash
STRING="strncpy(orderInfo.szParam,param.getString("szParam").c_str(),sizeof(orderInfo.szParam)-1);szMemo"
cat1.txt|whilereadline
do
param=`echo$line|awk'{print$1}'`
memo=`echo$line|awk'{print$2}'`
echo$STRING|sed"s/szParam/$param/;s/szMemo/$memo/"
echo$dst
done

1.txt 内容:

001002003004
aabbccdd

输出:

strncpy(orderInfo.001,param.getString("szParam").c_str(),sizeof(orderInfo.szParam)-1);002
strncpy(orderInfo.aa,param.getString("szParam").c_str(),sizeof(orderInfo.szParam)-1);bb

这个语句有问题:

echo$STRING|sed"s/szParam/$param/;sed/szMemo/$memo/"

我改成:

echo$STRING|sed"s/szParam/$param/;s/szMemo/$memo/"

或者

echo$STRING|sed"s/szParam/$param/"|sed"s/szMemo/$memo/"

4. shell脚本中的sed s/ /\ /g'这个命令是啥意思

sed的替换命令格式:s/A/B/g 或者 s#A#B#g 或者 s_A_B_g#只是分隔符而已,为满足格式需要。将所有制表符\t替换为|g表示全局替换,有多少次替换多少次。

5. shell脚本 将一个含特殊字符的变量,写入文件对应的位置中,使用sed要么写入的字符不正确要么就报错

假如SSID变量中没有&这个特殊符号,那么直接用sed是可以满足的

SSID='~!@#$%^*[}(/.*\/'
sed-is,ssid=.*,ssid=$SSID,gfilename

但是如果有了&符号,放到sed中会作为特殊用途展开,导致保留了原来的匹配字符,写入的内容会不正确。

此时,只能换一种方式,用awk来操作字符串,然后重新写入到文件中,此时需要多一个临时文件

cpfilenamefilename1;
awk'{gsub("^ssid=.*","ssid='$SSID'");print$0}'filename1>filename;
rm-ffilename1

6. shell的sed用法

sed 是Unix中类似于awk的行编辑器,对于sed工具包的所有操作来说, 我们最关心的其实就是3个最主要的操作. 分别是printing(打印到stdout), deletion(删除), 和substitution(替换). 它与awk不同的地方在于sed是非交互的编辑器,而awk是可交互的编辑器。它即可以从stdin中接收文本输入, 也可以从文件中接收文本输入, 它对输入中的指定行进行特定的操作, 一行操作一次, 然后将结果输出到stdout, 或输出到文件中. 在shell脚本中使用的话, sed通常都是作为管道工具链中的一个处理部分来使用.

Sed的处理方法,上面你提到的表达式叫作“模式匹配”,是一种替换操作:
s/pattern1/pattern2/
意思是用 pattern2 替换pattern1并显示到屏幕上。

讲讲echo "uid=100(guest) gid=100(others) groups=10(users),11(floppy)"|sed 's/^[^(]*(\([^)]*\).*/\1/'的意思 :
echo 是向屏幕显示一行字符
“|”叫管道,象水管一样把“|”前面程序产生的输出作为“|”后的程序的输入。
sed 行编辑器。
's/^[^(]*(\([^)]*\).*/\1/' 对应上文提到的替换参数,分成两部分,pattern1:/^[^(]*(\([^)]*\).*/
表示以不是以“(”开始的字符后面跟任意字符,然后是贪婪匹配模式运算(),任意以“(”字符开始,中间不包括")"字符的任意字符并以“)”后接。后面再接任意字符串。因为前面的程序输出“uid=100(guest) gid=100(others) groups=10(users),11(floppy)”,所以贪婪匹配模式得到结果(guest)
pattern2:/\1/ \1是正则表达式的贪婪匹配模式运算结果。
所以shell语句输出guest替换长长的一串“uid=100(guest) gid=100(others) groups=10(users),11(floppy)”

热点内容
python解压zip 发布:2025-02-12 09:08:46 浏览:921
如何加强人员配置 发布:2025-02-12 09:07:54 浏览:417
lol一区为什么服务器好卡 发布:2025-02-12 09:02:22 浏览:629
安卓运营商cm是哪个版本 发布:2025-02-12 09:00:00 浏览:515
pythonmd5校验 发布:2025-02-12 08:51:00 浏览:470
编程题解析 发布:2025-02-12 08:40:30 浏览:454
bilibi手机缓存目录在 发布:2025-02-12 08:33:11 浏览:458
听ti密码是多少 发布:2025-02-12 08:22:15 浏览:289
淘宝上传视频凭证 发布:2025-02-12 08:06:46 浏览:879
java画 发布:2025-02-12 08:01:00 浏览:550