我很困惑如何删除其中包含正斜杠和问号的字符串的一部分。
例子:/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN
我需要输出RXMWANT8WFYJNF7K6DXXXJLJVN
我已经尝试过tr
,sed
但tr
删除了输出中我需要的一些字符。sed
由于正斜杠,给我带来了麻烦。
/diag/PeerManager/list?deviceid=
删除字符串部分的快速方法是什么?谢谢!
echo "/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN" | sed -n 's:/[a-zA-Z] /[a-zA-Z] /[a-zA-Z] ?[a-zA-Z] =::p'
这应该可以解决问题。我选择冒号作为分隔符,因为它不会导致正斜杠出现任何问题。这对它将接收的输入类型做出了很多假设,特别是它只包含三个反斜杠,它们之间有大小写字母,一系列以问号结尾的字母,另一系列以等号结尾的字母符号。然后删除这些项目并打印剩余的字符(您的设备 ID)。
这对我有用:
sed 's/.*deviceid=\([^&]*\).*/\1/'
例子:
$ echo '/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN' | sed 's/.*deviceid=\([^&]*\).*/\1/'
RXMWANT8WFYJNF7K6DXXXJLJVN
这不是最强大的解决方案,但如果您有一组永远不会改变的固定输入,它可能就足够了。
使用 的一种方法awk
,如果=
每行仅出现一次 a :
awk -F= '{ print $2 }' file.txt
结果:
RXMWANT8WFYJNF7K6DXXXJLJVN
如果您知道您的 GET查询字符串将始终只有一个参数(在本例中为deviceid),那么您可以使用等号作为标准剪切实用程序的字段分隔符。例如:
$ echo '/diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN' |
cut -d= -f2-
RXMWANT8WFYJNF7K6DXXXJLJVN
怎么样:
$ echo /diag/PeerManager/list?deviceid=RXMWANT8WFYJNF7K6DXXXJLJVN | sed 's/^.*=//'
RXMWANT8WFYJNF7K6DXXXJLJVN