[問題] 用 ed(1) 編輯最後一個非空白行

看板Linux作者 (cuello)時間2年前 (2022/10/24 20:31), 2年前編輯推噓7(7019)
留言26則, 4人參與, 2年前最新討論串1/1
食飽未, 如題, 我想用 ed(1) 碰到問題 ------------------------------- #!/bin/sh # -- append-text-to-the-last-non-blank-line --- text=" 寫在最後一個非空白行尾巴" ed -s "$1" [小於 小於] EOF >/dev/null ?.?s/$/$text/ wq EOF --------------------------------- 倒也順利, 只不過不曉得除了 -s 之外 還有沒有個 --really-quiet? 一定要用 >/dev/null 嗎? 其實這還不是重點 上面的程式碰到尾巴沒有空白行的檔案就錯了! 因為, 好像 ?.? 會從最後第二行找起 結果就錯過了最後一行... 這裡有沒有真的用過 ed(1) 的人啊? PS. 剛剛連續幾次要打 here-document 的 小於 弄亂的 ptt 的 editor, 也不知怎麼回事.,,, -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.62.143 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1666614705.A.A7A.html

10/24 21:34, 2年前 , 1F
ed -s cuello.txt << EOF >/dev/null 2>&1
10/24 21:34, 1F

10/24 21:34, 2年前 , 2F
1
10/24 21:34, 2F

10/24 21:34, 2年前 , 3F
?.?s/$/$text/
10/24 21:34, 3F

10/24 21:35, 2年前 , 4F
wq
10/24 21:35, 4F

10/24 21:35, 2年前 , 5F
EOF
10/24 21:35, 5F

10/24 21:37, 2年前 , 6F
試過修改 cuello.txt 看起來 OK. :P
10/24 21:37, 6F
哈哈哈... 我都合不嚨嘴巴了, 真的耶! ed(1) 還會繞回去喔~~~ ho ho ho ho ho ho 唉, 怎麼辦? 也不知道怎麼謝啦... ※ 編輯: cuello (114.36.62.143 臺灣), 10/24/2022 21:41:52 ※ 編輯: cuello (114.36.62.143 臺灣), 10/24/2022 22:19:05

10/25 15:03, 2年前 , 7F
ed(1)讀取玩檔案會把行號設成最後一行... 很怪的設
10/25 15:03, 7F

10/25 15:03, 2年前 , 8F
10/25 15:03, 8F

10/25 21:32, 2年前 , 9F
純亂想, 啊我檔案讀完指標就是指在這裡啊~ :)
10/25 21:32, 9F
※ 編輯: cuello (114.36.70.90 臺灣), 10/26/2022 20:55:04

10/26 20:46, 2年前 , 10F
這樣想也沒錯啊. 查看 ed 的 man page, LINE ADDRESSING 的
10/26 20:46, 10F

10/26 20:48, 2年前 , 11F
第一段的最後兩句, 想像 ed file 就是進 ed 後再做 r file ,
10/26 20:48, 11F

10/26 20:50, 2年前 , 12F
再去查看 r file 就是如此.
10/26 20:50, 12F
是說, Debian 為甚麼決定預設不裝 ed(1)? 是煩惱會把硬碟塞暴? 還是基於甚麼微妙的, 長遠的考量要省下這個 package? 所以, 我還要考量人家有沒有 "Standard Editor" 可用... 沒有的話, 有沒有權限安裝? 這些盤算自然要衍生一個問題, 以上這件事情, 不用 ed(1) 的話, 大家都是怎麼做的? 這種任務應該常碰到吧... 用 ed(1) 之前, 我自己自然也做過, 可是, 就不拿出來見笑了好嗎? 因為連我自己都看不下去.... P.S. 還有, 好像 dc(1) 也很容易塞暴硬碟, 所以 Debian 就暫時不安裝了嗎... ※ 編輯: cuello (114.36.70.90 臺灣), 10/26/2022 20:58:18

10/26 21:12, 2年前 , 13F
ed 和 dc 都是很久遠的工具了吧. 使用 ex(vim) 和 bc 不好嗎?
10/26 21:12, 13F

10/26 21:19, 2年前 , 14F
至於在最後一行說是怪設計... 久遠的工具當然有其歷史背景.
10/26 21:19, 14F

10/26 21:32, 2年前 , 15F
啊~~ ex(1) 我還沒試過說...
10/26 21:32, 15F

10/26 22:11, 2年前 , 16F
之前看完Ed Mastery這本書之後試過用ed(1)裝arch L
10/26 22:11, 16F

10/26 22:11, 2年前 , 17F
inux
10/26 22:11, 17F

10/26 22:12, 2年前 , 18F
最後雖然一切正常 但我的心得.. 用cat加上heredoc
10/26 22:12, 18F

10/26 22:12, 2年前 , 19F
或是直接用sed
10/26 22:12, 19F

10/26 22:12, 2年前 , 20F
搞不好還比較快
10/26 22:12, 20F
經 yvb 提醒, 剛剛才發現, 上面那個程式, 可以把 "ed" 直接改為 "ex" 結果一樣! 起碼就這件事情而言, ex(1) 跟 ed(1) "相容" 現在好奇, ex(1) 也有意要取代 ed(1) 嗎? 不是, 用 sed 做這件事, 我就不會啊~~ 起碼不是那麼直接、乾翠... ※ 編輯: cuello (114.36.69.3 臺灣), 10/26/2022 22:47:57

10/27 10:06, 2年前 , 21F
當初你也不會ed/ex, 所以你也只是"現在"不會sed
10/27 10:06, 21F
※ 編輯: cuello (114.36.69.3 臺灣), 10/27/2022 20:22:30

10/27 20:06, 2年前 , 22F
與其說幹話, 樓上要不要提供原PO這個問題使用 sed 的做法?
10/27 20:06, 22F

10/27 20:10, 2年前 , 23F
這問題我覺得使用 ed/ex 似乎簡單許多.
10/27 20:10, 23F

10/27 20:19, 2年前 , 24F
ed ex 的故事請自行參考 wikipedia.
10/27 20:19, 24F
※ 編輯: cuello (114.36.69.3 臺灣), 10/27/2022 20:24:08 哈哈, 每次編輯文章的時候, 都跟 yvb 剛好 "相出路" 我再次把剛寫的部份移到最後面: 你可能誤會了... 我的意思是: e.g. sed(1) et al. for THIS VERY TASK How, would you do that? A     sed -i .... ? 不要再建個新檔, 再覆寫掉正本. 我的感覺是, sed 像是在錄音室編輯磁帶 你每一個時候只看到錄音帶的一個窗子 錄音頭位置跟它週遭 這一類的媒體, 必要時, 有可能涉及 "2nd pass" editing 這是 sequential access media 的本質 不同於 random access media ed, ex 雖然不見得一次載入所有 data 但它在本質上是 random access, 適合執行像是     1,3m$ 這種工作 為了避免太被自己的盲點屏蔽, 我才問大家說 sed(1) awk(1) 真得也可以做得直接了當嗎? 這一定會是很值得學習的啊 ~~~ ※ 編輯: cuello (114.36.69.3 臺灣), 10/27/2022 20:29:03

10/27 20:33, 2年前 , 25F
sed -i 或許可以, 但應該會用 b x h 等我覺得很不直覺的操作.
10/27 20:33, 25F
我只試到印出最後一個非空白行就卡住了:      sed -n -e '/^$/ !h' -e '$ {x;p;}' ※ 編輯: cuello (114.36.69.3 臺灣), 10/27/2022 20:43:48

10/28 14:55, 2年前 , 26F
會是幹話嘛? 好拉你說是就是,反正這是世界是你最大
10/28 14:55, 26F
文章代碼(AID): #1ZLeMnfw (Linux)
文章代碼(AID): #1ZLeMnfw (Linux)