Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash ubuntu中的sed命令_Bash_Shell_Sed - Fatal编程技术网

Bash ubuntu中的sed命令

Bash ubuntu中的sed命令,bash,shell,sed,Bash,Shell,Sed,我想找到连接到机器的设备的USB端口。我使用了命令 dmseg | grep "ttyUSB" | grep "attached" cut -d ' ' -f14 我得到的输出是 [ 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 ttyU

我想找到连接到机器的设备的USB端口。我使用了命令

dmseg | grep "ttyUSB" | grep "attached"
cut -d ' ' -f14
我得到的输出是

[  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
但我只需要港口。所以我用了命令

dmseg | grep "ttyUSB" | grep "attached"
cut -d ' ' -f14
我得到

ttyUSB0
ttyUSB1
我想用这个输出替换一个文件的值

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:unterminated's'命令

帮我弄清楚

提前感谢。

替换:

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

问题是管道产生了多条输出线。解决方案是添加
tr'\n'
以删除换行符

其他四点意见:

  • 串行接口中的
    S
    被转义,原因不明。我拆除了那个逃生通道

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

  • 正如在注释中提到的,引号中有引号,但这很好:内部引号位于
    $(…)
    的内部,因此不会干扰外部引号

  • 此命令的输出如下所示:

    SERIAL_INTERFACE=ttyUSB0 ttyUSB1
    
    因为你没有说你想要的输出是什么,我不知道这是否是你想要的

为什么出现“unterminated
s
command”错误? 假设我们有一个包含换行符的shell变量:

$ echo "$string"
a
b
将此变量替换为sed命令时,sed将换行符视为终止命令的行。结果是“未终止的
s
命令”:

相比之下,如果不使用换行符,则效果很好:

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

总之,在将shell变量替换为
sed
命令时,必须非常小心。

看起来您使用双引号将参数分隔为sed,并且在表达式中使用双引号。尝试转义双引号提供示例输入文件和预期输出。