批處理新手入門導讀[視頻教程]批處理基礎視頻教程[視頻教程]VBS基礎視頻教程
[批處理文件精品]批處理版照片整理器[批處理文件精品]純批處理備份&還原驅動在線第三方下載
返回列表 發帖

[已解決]sed倒序/反轉字符串的疑問

本帖最后由 zhanglei1371 于 2017-8-8 06:37 編輯

以下代碼可將ABCD變為DCBA,看了半天,不太理解,求解釋。
  1. sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" a.txt
復制代碼
尤其是//D的用法,能看出是循環的作用,但是前面兩個斜杠作用時什么?為什么不直接寫為D?

百度找到了解釋,分享學習一;
 需求:將 I love linux ! 反向輸出 :! linux love I
  方法:echo 'I love linux !' |sed '/\n/!G;s/\([^ ]* \)\(.*\n\)/&\2\1/;//D;s/\n/ /'
  
  解析:此方法關鍵在 D 參數。D 刪除模式空間中的第一行(確切的說應該時第一部分),如果刪除后,模式空間中還有剩余行,則返回 D 之前的命令,重新執行,如果 D 后,patten space 中沒有任何內容,則將退出 sed命令,將控制權交給 sed,在沒有 -n 參數時,sed 會輸出 pattern space 中的內容,如果最后一行沒有被讀入,則 sed 繼續讀入下一行,并去掉結尾的 \n 放到 pattern space 中,繼續執行 sed 命令如果最一行已經讀入,則退出 sed。

D命令會引起循環,如果 D 被執行,那么 D 后面的命令是不會被執行的。
  第一次"/\n/!G;"沒有\n換行符,要執行G,因為保留空間中為空,所以在模式空間追加一空行,此時內容為
模式空間第一部分:I love linux !\n
模式空間第二部分:null
執行后面的替換 “s/\([^ ]* \)\(.*\n\)/&\2\1/;”
模式空間第一部分:I love linux !\n
模式空間第二部分:love linux !\nI
模式空間第三部分:null
執行 ”//D; “//匹配空行執行D刪除模式空間第一部分
模式空間第一部分:love linux !\nI
模式空間第二部分:null
因為還有內容,返回前面命令

第二次"/\n/!G;"有\n不執行,內容不變
模式空間第一部分:love linux !\nI
模式空間第二部分:null
執行后面的替換 “s/\([^ ]* \)\(.*\n\)/&\2\1/;”
模式空間第一部分:love linux !\n
模式空間第二部分:linux !\nlove I
模式空間第三部分:null
執行 ”//D; “//匹配空行執行D刪除最上一行
模式空間第一部分:linux !\nlove I
模式空間第二部分:null
因為還有內容,返回前面命令

第三次"/\n/!G;"有\n不知行,內容不變
模式空間第一部分:linux !\nlove I
模式空間第二部分:null
執行后面的替換 “s/\([^ ]* \)\(.*\n\)/&\2\1/;”
模式空間第一部分:linux !\n
模式空間第二部分:!\nlinux love I
模式空間第三部分:null
執行 ”//D;“ //匹配空行執行D刪除最上一行
模式空間第一部分:!\nlinux love I
模式空間第二部分:null
因為還有內容,返回前面命令

第四次"/\n/!G;"有\n不知行,內容不變
模式空間第一部分:!\nlinux love I
模式空間第二部分:null執行后面的替換 “s/\([^ ]* \)\(.*\n\)/&\2\1/;” 因為!后面沒有空格所以不匹配,不執行
模式空間第一部分:!\nlinux love I
模式空間第二部分:null執行 ”//D;“ //匹配空行執行D刪除最上一行
模式空間:null

此時模式空間中為空結束循環,此時若沒有 ”s/\n/ / “則應該打印
!\nlinux love I
  因為有”s/\n/ / “,所以再此處將!\nlinux love I作為”s/\n/ / “的輸入內容,執行替換,最后結果
! linux love I

TOP

1

評分人數

【批處理在線視頻分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公眾號、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我幫忙寫的代碼不需要付錢,不用找我要支付寶或微信賬號。如果一定要給,請到微信群給大家發紅吧。

TOP

回復 1# zhanglei1371

批處理的反序,我也研究了半天。還是不得要領吧。

TOP

返回列表
捕鱼大师官网客服电话 股票指数是什么东西 江苏7位数 黑龙江体彩61走势图 山东群英会遗漏数据 安徽11选5分布走势图 今日股市收盘点评 安快3开奖号码 2007年上证指数 广西体育彩票11选5走势图 官网够力排列五 宁夏体彩11选五 快乐飞艇是骗局 体彩31选7开奖公告 山西11选五怎么看号 甘肃快三遗漏走势图 航心配资