簡體   English   中英

ubuntu中的sed命令

[英]sed command in ubuntu

我想找到連接到機器的設備的USB端口。 我用的命令

dmseg | grep "ttyUSB" | grep "attached"

我得到的輸出為

[  525.763315] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
[  525.796039] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB1

但是我只需要端口。 所以我用了命令

cut -d ' ' -f14

我有

ttyUSB0
ttyUSB1

我想用此輸出替換文件的值。所以我用了se命令

sed -i "s/\b\SERIAL_INTERFACE=\b.*/SERIAL_INTERFACE=$(dmesg | grep "ttyUSB" | grep "attached" | cut -d ' ' -f13)/g" /home/ubuntu/webserver/properties.cfg

但它顯示錯誤sed:-e表達式#1,字符46:未終止的s命令

幫我弄清楚這個。

先感謝您。

更換:

sed -i "s/\b\SERIAL_INTERFACE=\b.*/SERIAL_INTERFACE=$(dmesg | grep "ttyUSB" | grep "attached" | cut -d ' ' -f13)/g" /home/ubuntu/webserver/properties.cfg

有:

sed -i "s/\bSERIAL_INTERFACE=\b.*/SERIAL_INTERFACE=$(dmesg | grep "ttyUSB" | grep "attached" | cut -d ' ' -f14| tr '\n' ' ' | tee save.tmp)/g" /home/ubuntu/webserver

問題是管道產生了多條輸出線。 解決方案是添加tr '\\n' ' '以刪除換行符。

其他四條評論:

  • SERIAL_INTERFACE中的S沒有明顯原因被轉義。 我刪除了那個逃生路線。

  • 您報告了命令cut -d ' ' -f14成功,但是管道命令使用了cut -d ' ' -f13

  • 如評論中所述,您確實在引號內有引號,但這很好:內部引號位於$(...)內部,因此不會干擾外部引號。

  • 該命令的輸出如下所示:

     SERIAL_INTERFACE=ttyUSB0 ttyUSB1 

    由於您尚未說出所需的輸出,因此我不知道這是否是您想要的。

為什么出現“ unsminated s command”錯誤?

假設我們有一個包含換行符的shell變量:

$ echo "$string"
a
b

當您將此變量替換為sed命令時,sed會將換行符視為終止命令的行。 結果是一個“ unsminated s命令”:

$ echo hi | sed "s/hi/$string"
sed: -e expression #1, char 6: unterminated `s' command

相比之下,沒有換行符,它可以正常工作:

$ string="a b"
$ echo hi | sed "s/hi/$string/"
a b

總之,在將shell變量替換為sed命令時,必須非常小心。

暫無
暫無

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

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