(shell awk sed 動態(tài)正則)

[一個有趣的題目(shell awk sed 動態(tài)正則)]

cat file:

a b c a d a

s d d d x s a

h j s a s h j h

j d f j a s j k j

要求:刪除行內(nèi)與第一列字符重復(fù)的字符,shell、sed、awk各寫一個。達到這個結(jié)果:

a b c d

s d d d x a

h j s a s j

j d f a s k

shell版:

  1. while read a b;do echo "a{b// $a}";done <file

[解析]

while可以讀取數(shù)個變量,第一個變量代表第一個字符串(由IFS變量決定分割符),第二個代表變量代表第二個,依次類推,但是最后一個變量則代表剩下的所有,那么這里 a 這是第一個字符串,b 則是剩下的所有字符串,然后再對 b 中的含有a 的進行全部替換為空。

awk版:

  1. awk '{a=1;gsub(" ?"a,"");print a""0}' file

[解析]

其實所有的原理都是替換,awk呢利用 gsub() 進行全局替換,這點注意雙引號內(nèi)的問號,這是一個正則,在雙引號中使用正則,學(xué)名叫 Dynamic Regexps 。

sed版:

  1. sed ':a;s/^(.)(.*) \1/\1\2/;ta' file

[解析]

這個也是一樣的,利用 t label 來完成替換。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • sed與awk實例 文本間隔 在每一行后面增加一空行 將原來的所有空行刪除并在每一行后面增加一空行。這樣在輸出的文...
    stuha閱讀 2,023評論 0 20
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,044評論 0 2
  • 第 2 章 SHELL 基礎(chǔ)知識2.1 shell腳本我們在上面簡單介紹了一下什么是shell腳本,現(xiàn)在我們來進一...
    LiWei_9e4b閱讀 1,648評論 0 0
  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,494評論 3 53
  • 基礎(chǔ)命令 主要的命令和快捷鍵 Linux系統(tǒng)命令由三部分組成:cmd + [options]+[operation...
    485b1aca799e閱讀 1,221評論 0 0

友情鏈接更多精彩內(nèi)容