sed批量替换多个文件内容
admin
2024-02-12 22:08:50
0次

sed批量替换多个文件内容

1、问题:

批量生成的sql数据文件,SQL文件开始,为了提高效率需要将set timing on修改为set timing off
涉及文件数量超过两百个。

set feedback off
set define off
set echo off
set heading off
set timing on

2、解决:

通过sed解决。

(1)单个文件

做一个test.sql测试文件,内容如下:

set feedback off
set define off
set echo off
set heading off
set timing on

替换命令:

# sed -i "s/set timing on/set timing off/g" /script/program/test.txt

顺利实现。

(2)多个文件

第一次:

sed -i "s/set timing on/set timing off/g" `grep set timing on -rl /sqlscript/Thread`
#sed -i "s/set timing on/set timing off/g" `grep set timing on -rl /sqlscript/Thread
timing on -rl /sqlscript/Thread`
grep: timing: 没有那个文件或目录
grep: on: 没有那个文件或目录
grep: /sqlscript/Thread: 没有那个文件或目录
sed: 没有输入文件

第二次:
字符串空格用双引号:“set timing on”

 sed -i "s/set timing on/set timing off/g" `grep "set timing on" -rl /sqlscript/Thread`

由于每个sql文件都比较大,有几百兆,运行长时间无反应。

第三次
将g参数更换为1,不是全部更换,只更换第一次查询到的set timing on

sed -i "s/set timing on/set timing off/1" `grep "set timing on" -rl /sqlscript/Thread`

效率提高很多,但是也用了半个小时才完成。

3、sed参数

sed全称是:Stream EDitor

常用选项:
-e   --它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时使用
-f   --后跟保存了sed指令的文件
-i   --直接对内容进行修改,不加 i 时默认只是预览,不会对文件进行实际修改
-n   --取消默认输出,sed默认会输出所有文本内容,使用 -n 参数后只显示处理过的行
编辑命令:
a   --追加,向匹配行后插入内容
c   --更改,更改匹配行的内容
i   --插入,向匹配行前插入内容
d   --删除,删除匹配的内容
s   --替换,替换匹配到的内容
p   --打印,打印匹配到的内容,通常与 -n 和用
=   --用来打印被匹配到的行的行号
n  --读取下一行,遇到n时会自动跳入下一行
r,w   --读和写,r用于将内容读入文件,w用于将匹配内容写入到文件这里是引用

4、常用示例备查

sed -i "1ahello" 1.txt       --在第一行后面添加 “hello”,并保存修改
sed -i "/ab/ahello" 1.txt     --在内容ab后面添加 “hello”,并保存修改
sed "$ahello" 1.txt       --在最后一行添加 “hello”,可直接预览sed -i "2ihello" 1.txt       --在第二行之前插入 “hello”
sed -i "/ab/ihello" 1.txt     --在包含“ab”的行之前插入“hello”,如果有多行,则每一行之前都会添加sed -i "2chello" 1.txt       --将文件的第二行替换为“hello”
sed -i "/ab/chello" 1.txt     --将包含"ab"的行替换成“hello”sed ‘1d’ 1.txt       --删除第一行
sed '1~2d' 1.txt       --从第一行开始删除,每隔两行就删除一行,即删除奇数行
sed '1,2d' 1.txt       --删除掉1~2行
sed ‘1,2!d’ 1.txt     --删除1~2之外的所有行
sed '$d' 1.txt       --删除掉最后一行
sed '/ab/d' 1.txt       --删除匹配“ab”的行
sed ‘/ab/,$d’ 1.txt       --删除从匹配“ab”的行到最后一行
sed ‘/ab/,+1d’ 1.txt       --删除从匹配“ab”的行及后面一行
sed ‘/^$/d’ 1.txt       --删除空行
sed '/ab\|12/!d' 1.txt     --删除不匹配12或ab的行,/ab\|12/表示匹配12或ab,!表示取反
sed '1,3{/ab/d}' 1.txt     --删除1~3行中,匹配内容‘ab的行
sed 's/12/hello' 1.txt     --将文中的’12‘替换成’hello‘,默认只替换每行第一个’12‘
sed ’s/12/hello/g‘ 1.txt     --将文中的所有’12‘都替换成’hello‘
sed 's/12/hello/2' 1.txt     --将每行中第二个匹配的’12‘替换成’hello‘
sed -n 's/12/hello/gpw 2.txt' 1.txt     --将每行中所有匹配的’12‘替换成’hello‘,并将替换后的内容写入2.txt
sed '/#/,.*//g' 1.txt       --匹配有#号的行,替换匹配行中逗号后的所有内容,(,.*)表示逗号后的所有内容
sed 's/..$//g' 1.txt       --替换每行中的最后两个字符为空,每个点代表一个字符
sed 's/^#.*//'  1.txt       --将#开头的行替换为空行,即注释的行
sed 's/^#.*//;/^$/d'  1.txt      --先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开
sed 's/^[0-9]/(&)/'   1.txt      --将每一行中行首的数字加上一个小括号   (^[0-9])表示行首是数字,&符号代表匹配的内容
sed  's/$/&'ha'/'  1.txt     --在1.txt文件的每一行后面加上"ha"字段sed  -n '1p'  1.txt       --打印文件中的第一行内容
sed  -n '2~2p'  1.txt     --从第二行开始,每隔两行打印一行,波浪号后面的2表示步长
sed -n '$p'  1.txt       --打印文件的最后一行
sed -n '1,5p'  1.txt       --打印1到5行
sed  -n '5,$p'  1.txt       --打印从第5行到最后一行的内容
sed  -n '/you/p'  1.txt        --逐行读取文件,打印匹配you的行
sed  -n '/ab/,5p'  1.txt       --逐行读取文件,打印从匹配ab的行到第5行的内容
sed  -n '1,/ab/p'  1.txt        --打印第一行到匹配ab的行
sed  -n '/ab/,/ac/p'  1.txt       --打印从匹配内容ab到匹配内容ac的行
sed  -n "$="   1.txt         --打印1.txt文件最后一行的行号
ed  -n '/ab/='  1.txt         --打印匹配ab的行的行号
sed  -n '/ab/{=;p}'   1.txt        --打印匹配ab的行的行号和内容
sed  'r 2.txt'  1.txt           --将文件2.txt中的内容,读入1.txt中,会在1.txt中的每一行后都读入2.txt的内容
sed '1r 2.txt'  1.txt           --1.txt的第1行之后插入文件2.txt的内容
sed  '/ab/r   2.txt'   1.txt       --在匹配ab的行之后插入文件2.txt的内容,如果1.txt中有多行匹配ab则在每一行之后都会插入
sed  '$r  2.txt'   1.txt          --在1.txt的最后一行插入2.txt的内容sed  -n  'w 2.txt'   1.txt         --将1.txt文件的内容写入2.txt文件,如果2.txt文件不存在则创建,如果2.txt存在则覆盖之前的内容
sed   -n '2w  2.txt'   1.txt         --将文件1.txt中的第2行内容写入到文件2.txt
sed  -n -e '1w  2.txt'  -e '$w 2.txt'   1.txt       --将1.txt的第1行和最后一行内容写入2.txt
sed  -n -e '1w  2.txt'  -e '$w  3.txt'  1.txt         --将1.txt的第1行和最后一行分别写入2.txt和3.txt
sed  -n  '/ab\|12/w  2.txt'    1.txt          --将1.txt中匹配ab或12的行的内容,写入到2.txt中
sed  -n '/ab/,$w 2.txt'   1.txt            --将1.txt中从匹配ab的行到最后一行的内容,写入到2.txt中
sed  -n  '/ab/,+2w  2.txt'     1.txt          --将1.txt中从匹配ab的行及其后2行的内容,写入到2.txt中

相关内容

热门资讯

蜻蜓订购APP贵金属订购非法期...   蜻蜓订购APP以"投资平台"名义对外宣传,主打贵金属期货(订购)交易。该平台一方面强调自身"正规...
悟空订购APP非法期货交易欺骗...   近期,有投资者反映,“悟空订购APP”等平台以白银、贵金属订购为名,宣传所谓“高收益”“低门槛”...
小赢淘金APP期货投资骗局,平...   “小赢淘金”之流,最擅长的就是用“注册送现金”、“充值返券”的糖衣炮弹来引流。别天真地以为那是福...
八方淘金APP非法期货交易欺骗...   警惕!八方生财、每日淘金、小赢淘金、悟空订购、蜻蜓订购、斗金订购等APP均涉嫌非法期货交易!  ...
智易购APP贵金属订购交易骗局...   很多人看到“3元起投”“充值送福利”“操作简单”“随时提现”这类宣传,很容易把智易购APP当成普...
喜玛银庄APP商品订购投资骗局...   喜玛银庄APP白银、铂金“现货订购”骗局警示:无资质平台涉嫌非法期货交易,投资者爆仓后如何维权?...
吉鑫乐享APP炒贵金属订购交易...   近期,多名投资者反映在“吉鑫乐享APP”进行贵金属投资时遭遇严重亏损,甚至血本无归。看似正规的“...
易掘金APP虚假期货投资骗局,...   “易掘金”的APP它打着“高收益、灵活投资”的旗号,宣称通过“商品订购”就能轻松赚钱,吸引了不少...
在大吉订购APP订购交易亏损被...   近期,不少投资者反映在“大吉订购App”上投资白银、铂金等商品遭遇严重亏损。该平台宣称提供现货订...
铂银壹号APP商品订购交易亏损...   许多中小投资者误以为网上的“商品现货订购”是合规合法的理财渠道,殊不知这背后隐藏着巨大的合规风险...
兴鑫淘金APP贵金属订购交易亏...   白银、贵金属或其他商品类投资,除国家批准的正规期货交易场所及持牌期货公司外,市面上大量第三方交易...
铂银掘金APP无资质的违规平台...   铂银掘金等平台的投资者,往往是被“注册送现金”“充值返现券”“首单免亏”等广告话术吸引,进而下载...
八方淘金APP订购交易不合规,...   “八方淘金APP”“铂银掘金APP”“铂银壹号APP”等软件被指以“现货订购”为名,实际采用高杠...
在指尖订购APP订购商品亏损被...   指尖订购APP这类平台,表面是“订购交易”,实则是披着电商外衣的非法期货陷阱。绝大多数投资者被蒙...
在犀贝易购APP做商品订购交易...   市面上打着“现货投资”“贵金属交易”旗号的APP并不少,但真正合规、受监管的平台并不多。犀贝易购...
易达淘金APP虚假商品订购交易...   易达淘金APP存在严重的虚假宣传与违规交易行为。该平台打着“商品订购”的旗号,实则通过不合规的交...
大浪淘金APP白银订购亏损被骗...   大浪淘金APP最隐蔽的套路,在于其完全封闭的内盘交易系统。表面上,它宣称与国际贵金属市场接轨;实...
一品好购APP上订购白银出现亏...   一品好购APP原名“一品订购”,运营方为上海宝智未来信息技术有限公司。近期不少投资者反映在该平台...
九州订购APP贵金属订购投资骗...   九州订购APP正通过抖.音、快手、今日头条等平台大量投放投资广告,用“5元起投”“充值返现”“0...
坚锅淘金APP交易软件并不正规...   当前,市面上大量所谓的“现货商城订购”交易软件,早已偏离了正常的实物商品买卖,演变为高杠杆、高手...