bash将带有特殊字符和换行符的文本附加到文件的特定行

bash将带有特殊字符和换行符的文本附加到文件的特定行,bash,shell,text-processing,Bash,Shell,Text Processing,我试图将代码文本附加到文件中,代码如下所示 @ReactMethod public void printBarCode(String str, int nType, int nWidthX, int nHeight, int nHriFontType, int nHriFontPosition) { byte[] command = PrinterCommand.getBarCodeCommand(str, nType, nWidthX, nHeight, nHriF

我试图将代码文本附加到文件中,代码如下所示

@ReactMethod
public void printBarCode(String str, int nType, int nWidthX, int nHeight,
          int nHriFontType, int nHriFontPosition) {
    byte[] command = PrinterCommand.getBarCodeCommand(str, nType, nWidthX, nHeight, nHriFontType, nHriFontPosition);
    sendDataByte(command);
}
我把它放到一个名为print_config的变量中

我所做的是

sed-i“436i$print\u config”$file
#错误
sed:-e表达式#1,字符25:命令后的额外字符

我在行尾加了一个“\n”,它没有换行,而是
@ReactMethod'n'public void…

您遇到的问题是
print\u config
中包含的文本在文件中没有换行。具体而言,您正在尝试多行插入:

@ReactMethod
公共无效打印条形码(字符串str、int nType、int nWidthX、int nHeight、,
int nHriFontType,int nHriFontPosition){
byte[]command=PrinterCommand.getBarCodeCommand(str、nType、nWidthX、nHeight、nHriFontType、nHriFontPosition);
sendDataByte(命令);
}
如果不在每条换行之前加上
'\'
字符,则无法执行此操作。从
man sed
可以看到
“i\text Insert text,其中每个嵌入的换行符前面都有一个反斜杠。”

相反,您最好将上述内容保存到一个临时文件中,然后使用
r filename
命令添加从filename读取的文本。在您的情况下,您应该:

sed -i '436r tempfile' file_to_modify

这将把
tempfile
的内容读入
file\u以修改
第436行的
436
中,而不必修改文本以用反斜杠转义每个换行符。

如果我有两个配置,我必须生成两个文件吗?这将是最简单的处理方法。否则,每次插入都需要使用
sed
两次。一次用于在要插入的文本中用反斜杠转义换行,两次用于实际插入文本。两个临时文件是一种更简单、问题更少的方法。