sed刪除匹配行的上一行和下一行

2021-10-05 11:49:59 字數 2896 閱讀 9103

aa=string     #變數指定匹配字串

sed -i -e '/'"$aa"'$/' -e '$!n;/\n.*'"$aa"'$/!p;d' file

例子:

insert into bonusreturnorder values ('47', '224', '1300573', '2', '1', 'wx20160203083601539373', 'hbtk20160204020000110119', '2016-02-04 02:00:01', '2016-02-04 02:00:00', '1200.00', '超時未領完');

insert into bonusreturnorder values ('50', '254', '697', '2', '1', 'wx20160203085132174280', 'hbtk20160204020001045349', '2016-02-04 02:00:02', '2016-02-04 02:00:01', '600.00', '超時未領完');

-- bonusid number(11) ,

deleteflag number(2) ,

type number(2) ,

); create table bonususer (

-- senduserid number(11) ,

sendusername varchar2(32) ,

bonusticketno varchar2(32) ,

); insert into bonususer values ('332', '155', '100.00', '85705', '3', '2016-02-03 07:12:27', '2016-02-03 07:13:11', null, '1', '1322', null, 'hb201602030712277209291');

insert into bonususer values ('335', '155', '100.00', '1322', '3', '2016-02-03 07:12:27', '2016-02-03 07:12:38', null, '1', '1322', null, 'hb201602030712277209292');

-- receiveuserid number(11) not null,

deleteflag number(1) not null ,

createtime date ,

); insert into rb_bonustouser values ('97154', '8515718', '239473', '1', '2017-01-11 19:28:16');

insert into rb_bonustouser values ('97156', '8515718', '11326', '1', '2017-01-11 19:28:16');

使用sed刪除以)開頭的行的上一行末尾的逗號

苦惱了我兩個晚上也沒搞定,期間也參考了網上一些大神的部落格和gnu官網sed命令的詳解。最終選擇在csdn上發帖求助文字處理大神,迎刃而解。在此感謝大牛 「**譽寫工」。

[pc@s5 ~]$ sed '/,\s*$/' file

20000110119', '2016-02-04 02:00:01', '2016-02-04 02:00:00', '1200.00', '超時未領完');

insert into bonusreturnorder values ('50', '254', '697', '2', '1', 'wx20160203085132174280', 'hbtk20160204020001045349', '2016-02-04 02:00:02', '2016-02-04 02:00:01', '600.00', '超時未領完');

-- bonusid number(11) ,

deleteflag number(2) ,

type number(2)

); create table bonususer (

-- senduserid number(11) ,

sendusername varchar2(32) ,

bonusticketno varchar2(32)

); insert into bonususer values ('332', '155', '100.00', '85705', '3', '2016-02-03 07:12:27', '2016-02-03 07:13:11', null, '1', '1322', null, 'hb201602030712277209291');

insert into bonususer values ('335', '155', '100.00', '1322', '3', '2016-02-03 07:12:27', '2016-02-03 07:12:38', null, '1', '1322', null, 'hb201602030712277209292');

-- receiveuserid number(11) not null,

deleteflag number(1) not null ,

createtime date

); insert into rb_bon

解釋:

\s匹配空格、製表符、換行、回車,也就是\s其實也匹配\n(多行模式的每行結尾)

\s*就是有0到n個空格或\n

/,/{}只要找到「,」就執行{}裡的語句

:loop就是個標識,bloop 就是跳轉到:loop

n是把下一行加入模式空間

/.\s*)/! bloop是如果模式空間發現了「, )」(這個「,」和「)」之間也許有n多個空格和回車,但沒有其它字元),就不再執行:loop,也就是不n,而是執行bloop後的語句

s/,\s*)/\n)/ 就是去掉「,」號

sed 刪除某一行 sed刪除指定行

待處理文字如1 8行文字 cata1 sed刪除連續指定行 如1 4行 sed 1,4d a5 sed刪除不連續指定行 如第一行和第三行 sed e 1d e 3d a2 乙個例子 我有乙個list檔案如下 cat list unknown other 2 檔名,我要從檔案裡抓取一些資訊,下同,發現...

mysql 上一行減去下一行

1.新建表1新增自增行號列 考慮到自增id 有丟失資料現象 2.複製上表1為表2 3.根據表1 表2行號進行where或者left join on的處理 where 進行處理的條件為表1表2完全的匹配 left join on 處理的條件為 左表完全的匹配 設定記憶體變數 set arownum 0...

sed 匹配內容的前一行和後一行 新增內容

sed 匹配內容的前一行和後一行 新增內容 原創struggleyouth 最後發布於2017 05 09 13 36 26 閱讀數 32859 收藏 展開一 在某行的前一行或後一行新增內容 具休操作如下 匹配行前加 匹配行前後 而在書寫的時候為便與區分,往往會在i和a前面加乙個反加乙個反斜扛 就變...