Bash ubuntu中的sed命令
我想找到连接到机器的设备的USB端口。我使用了命令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
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
s
command”错误?
假设我们有一个包含换行符的shell变量:
$ echo "$string"
a
b
将此变量替换为sed命令时,sed将换行符视为终止命令的行。结果是“未终止的s
命令”:
相比之下,如果不使用换行符,则效果很好:
$ string="a b"
$ echo hi | sed "s/hi/$string/"
a b
总之,在将shell变量替换为
sed
命令时,必须非常小心。看起来您使用双引号将参数分隔为sed,并且在表达式中使用双引号。尝试转义双引号提供示例输入文件和预期输出。