亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: sed實(shí)現(xiàn)在指定行之前讀入文件內(nèi)容 [打印本頁]

作者: songyc_2015    時(shí)間: 2015-06-08 22:18
標(biāo)題: sed實(shí)現(xiàn)在指定行之前讀入文件內(nèi)容
各位大神,好!
請(qǐng)教一個(gè)問題:
在指定行之前讀入文件內(nèi)容,如:
  1. $cat a.txt
  2. aaa
  3. bbb
復(fù)制代碼
  1. $cat b.txt
  2. 1
  3. 2
  4. 3
復(fù)制代碼
在b.txt的第2行之前讀入a.txt的內(nèi)容,想得到結(jié)果:
  1. 1
  2. aaa
  3. bbb
  4. 2
  5. 3
復(fù)制代碼
  1. $sed '2{r a.txt
  2. }' b.txt
  3. 1
  4. 2
  5. aaa
  6. bbb
  7. 3
  8. 讀入a.txt的內(nèi)容在第2行之后了,結(jié)果不正確
復(fù)制代碼
  1. sed '2{r a.txt
  2. N;}' b.txt
  3. 1
  4. aaa
  5. bbb
  6. 2
  7. 3
  8. 得到的結(jié)果正確
復(fù)制代碼
問題1:比較上面的命令,發(fā)現(xiàn)第二條命令比第一條了N命令,則可以得到正確的結(jié)果,請(qǐng)問為什么?是什么原理?
問題2:如果想在最后一行之前讀入a.txt的內(nèi)容,sed怎么實(shí)現(xiàn)?結(jié)果如:
  1. 1
  2. 2
  3. aaa
  4. bbb
  5. 3
復(fù)制代碼
望各位大神不吝賜教~~~~~
作者: lifayi2008    時(shí)間: 2015-06-09 10:07
本帖最后由 lifayi2008 于 2015-06-09 10:08 編輯

看錯(cuò)了
作者: blackold    時(shí)間: 2015-06-09 10:11
回復(fù) 1# songyc_2015


    建議你在"某行之后"讀入……
作者: lifayi2008    時(shí)間: 2015-06-09 10:16
你也沒看問題二 回復(fù) 3# blackold


   
作者: blackold    時(shí)間: 2015-06-09 10:21
回復(fù) 4# lifayi2008


    我認(rèn)真看完了。
作者: songyc_2015    時(shí)間: 2015-06-09 10:24
回復(fù) 3# blackold
黑哥好!可否幫忙解答下第一個(gè)疑問?
sed在執(zhí)行到2{...}時(shí),此時(shí)模式空間的內(nèi)容為"2",r a.txt讀入文件的內(nèi)容不是讀入到模式空間的(之前看過的一個(gè)貼子,現(xiàn)在忘了是哪個(gè)帖子),那么讀入的a.txt內(nèi)容是保存到哪里的?sed又是怎么觸發(fā)打印a.txt內(nèi)容的?

建議你在"某行之后"讀入……

如果已知條件就是"最后一行之前讀入a.txt的內(nèi)容",按照您的建議就是在倒數(shù)第2行讀入a.txt的內(nèi)容,那么定位倒數(shù)第2行呢?
作者: songyc_2015    時(shí)間: 2015-06-09 10:25
回復(fù) 2# lifayi2008
可能是描述不夠準(zhǔn)確吧
作者: blackold    時(shí)間: 2015-06-09 10:45
回復(fù) 6# songyc_2015


    r 的內(nèi)容并沒有放入模式空間。而且,它在何時(shí)輸出,這不好控制。

    可以先把文件讀入到變量,再用s命令進(jìn)行替換,這比較好控制。
作者: blackold    時(shí)間: 2015-06-09 10:49
或者用 ed , 對(duì)這種問題,ed 容易實(shí)現(xiàn)。
作者: songyc_2015    時(shí)間: 2015-06-09 11:06
回復(fù) 8# blackold

感謝黑哥的建議,ed不太懂
作者: blackold    時(shí)間: 2015-06-09 11:18
本帖最后由 blackold 于 2015-06-09 11:22 編輯

回復(fù) 10# songyc_2015

ed
  1. ed - b.txt <<EOF
  2. $-1r a.txt
  3. w
  4. EOF
復(fù)制代碼
sed:
a="$(<a.txt)"
a="${a//$'\n'/\\n}"
sed '$s/^/'"$a"'\n/;' b.txt

作者: songyc_2015    時(shí)間: 2015-06-09 11:37
本帖最后由 songyc_2015 于 2015-06-09 11:46 編輯

回復(fù) 11# blackold
ed那么簡(jiǎn)單就實(shí)現(xiàn)了?黑哥大牛啊,去研究研究ed,謝謝
這種情況sed確實(shí)不好處理,如果a.txt文件太大的話,還很容易出問題·~~~~
作者: jason680    時(shí)間: 2015-06-09 12:41
回復(fù) 12# songyc_2015

筷子喝湯?
大家認(rèn)為是牛,還是錯(cuò)用工具?

$ cat a.txt
a1
a2
a3

$ cat b.txt
b1
b2
b3
b4

$ awk 'NR==2{while(getline a < "a.txt")print a}1' b.txt
b1
a1
a2
a3
b2
b3
b4


   
作者: songyc_2015    時(shí)間: 2015-06-09 13:09
本帖最后由 songyc_2015 于 2015-06-09 13:10 編輯

回復(fù) 13# jason680
謝謝Jason大神回復(fù),并不是只允許用筷子喝湯,只是不熟悉sed,大家討論下而已
作者: jeffreyst    時(shí)間: 2015-06-09 21:10
樓主這個(gè)題很有意思,看下這個(gè)sedsed的執(zhí)行流程,或許對(duì)你有幫助,

QQ圖片20150609210942.png (24.86 KB, 下載次數(shù): 123)

QQ圖片20150609210942.png

作者: songyc_2015    時(shí)間: 2015-06-09 22:13
回復(fù) 15# jeffreyst
謝謝jeff兄
作者: 聆雨淋夜    時(shí)間: 2015-06-10 14:04
  1. sed '${h;s/.*/cat a.txt/e;G}' b.txt
  2. 1
  3. 2
  4. aaa
  5. bbb
  6. 3
復(fù)制代碼

作者: songyc_2015    時(shí)間: 2015-06-10 22:17
本帖最后由 songyc_2015 于 2015-06-10 22:21 編輯

回復(fù) 17# 聆雨淋夜
厲害,學(xué)習(xí)了,昨晚我也想到一個(gè),和你類似,你的方法更簡(jiǎn)潔點(diǎn)只不過這個(gè)方法是調(diào)用了另一個(gè)進(jìn)程了
  1. sed '${x;s#.*#sed -n 'p' a.txt#e;p;x}' b.txt
  2. 1
  3. 2
  4. aaa
  5. bbb
  6. 3
復(fù)制代碼

作者: 我愛你我的菜    時(shí)間: 2015-09-07 10:28
awk 'FNR==NR{a[$1]=$1;}NR!=FNR{print $0;if(FNR==1){for(i in a) print a[i]}}' test.txt t1.txt
作者: sunzhiguolu    時(shí)間: 2015-09-07 10:54
回復(fù) 1# songyc_2015
各位大神好,菜鳥覺得 r 命令讀取到的內(nèi)容并沒有讀入到模式空間.
sed -nr '
2 {
r a.txt
}' b.txt

查看輸出結(jié)果,b.txt的文本內(nèi)容依然被打印出來
至于 N 命令,如果上面的條件成立; 那么 N 命令就好解釋了,為了確保模式空間與輸入行之間的完整性與一致性強(qiáng)迫將 a.txt 內(nèi)容提前打印出來!

如有不對(duì)之處,還請(qǐng)大家給予指點(diǎn). 這也是我的粗淺理解.

   




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2