簡體   English   中英

如何在macOS上使用sed用bash腳本替換行

[英]How to use sed on macOS to replace a line with bash script

我在使用macOS High Sierra時,在sed上遇到了一些問題,在Google和該網站上呆了一天后,我已經盡力嘗試了我能想到的一切,並提出了建議。

我有3行的example.txt文件。 第1行第2行第3行

3行可以是任何內容,我不預先知道它們。 (場景)在某些時候,我確實知道這條線是什么。

我想要實現的只是使用基本上說的“無論如何”的onliner:在該文件中,用新數據替換第2行。

sed -i "2s/.*/$NEW_DATA/" "$FILENAME"

這應該可以,但是在macOS上則不能。

sed -ie "2s/.*/$NEW_DATA/" "$FILENAME"

注意e? 這里有人建議添加一個e,是的,這是可行的..但這意味着它將.txt后面添加了e。 我最終得到2個文件,例如example.txt和example.txte

sed -i'' "2s/.*/$NEW_DATA/" "$FILENAME"

注意-i后面的”,是的,沒有空格嗎? 這也應該起作用。 並非如此,它會抱怨命令c需要\\

我可以繼續,但是請求非常簡單:

在macOS上,在bash shell腳本中,如何簡單地用全新的文本行替換.txt文件中的指定文本行-不知道之前的文本行?

如果這可以是帶有awk或其他功能的簡單macOS襯墊,那就很好。 它不必被sed。 但是,當我搜索此站點時,這似乎是推薦使用的站點。

在macOS的sed手冊頁中:

-i extension
         Edit files in-place, saving backups with the specified extension. 
         If a zero-length extension is given, no backup will be saved. 

因此,可以在不保留備份的情況下替換第2行:

sed -i '' "2s/.*/$NEW_DATA/" testfile.txt

如果目標只是替換第2行的內容,那么也可以使用awk ,例如:

awk 'NR==2{$0="your content"}1' testfile.txt > testfile.tmp && mv testfile.tmp testfile.txt

在MacOS上帶sed-i參數需要備份文件的文件擴展名,例如:

/usr/bin/sed  -i .bkp  "2s/.*/$NEW_DATA/" "$FILENAME"

如果您不想要備份文件,請使用:

/usr/bin/sed  -i"" "2s/.*/$NEW_DATA/" "$FILENAME"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM