在将statusfile.log
内容添加到statusfile_truncated.log
时,我试图使用双引号。
我环顾四周,越来越困惑。 你将如何实现它?
这是我到目前为止:
#!/bin/bash statusfile="statusfile.log" statusfile_truncated="statusfile_truncated.log" tail -n 50 $statusfile >> $statusfile_truncated
statusfile.log的内容:
2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. "/xxxxxxxxxxxxx" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. "/xxxxxxxxxxxxx" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. "/xxxxxxxxxxxxx" is current directory.
statusfile_truncated.log的内容应该是:
2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. \"/xxxxxxxxxxxxx\" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. \"/xxxxxxxxxxxxx\" is current directory. 2017-05-15 22:36:18 test.somedomain.com <--- 250 CWD successful. \"/xxxxxxxxxxxxx\" is current directory.
我只是想在双引号前插入一个反斜杠,你可以像这样使用sed
:
sed 's/"/\\"/g' $statusfile >> $statusfile_truncated
但是,如果真的要逃避,还有其他的工具和技术应该被考虑。
在bash
引用string的最好方法是在printf
使用%b
选项。 这将处理所有特殊字符:
$ variablename='foo "bar and C:\\foo\\bar' $ printf '%b\n' "$variablename" foo "bar and C:\foo\bar