如何在sed命令中使用句柄换行



我试图使用sed命令将IFS文本文件中的字符串替换为包含换行字符(n)的另一个字符串。除了换行字符外,一切正常。你知道我怎样才能让换行符(n)工作吗?下面是我尝试过的:

  1. IFS文本文件名为test.txt。以下是该文件的内容:
&1                                                        
  1. 我在一个RPGLE程序中运行了以下命令,将&1替换为"Line 1 n Line 2"的文本,期望n将被翻译成回车和换行字符
QSH CMD('sed -e "s?&1? Line 1 n Line 2 ?g" test.txt > test.out')
  1. 字符串替换工作,除了换行符(n)字符。结果文件test。出来,如下图所示。n被转换为字符n:
Line 1 n Line 2 
  1. 我也在下面试过,没有一个工作:
QSH CMD('sed -e "s?&1? Line 1 \n Line 2 ?g" test.txt > test.out')
QSH CMD('sed -e "s?&1? Line 1 \\n Line 2 ?g" test.txt > test.out')

我无法正常工作。我最终使用awk实用程序来实现它。下面是awk命令:

QSH CMD('export QIBM_CCSID=1252; awk ''{gsub(/&1/, "Line 1 rn Line 2", $0); print}'' test.txt > test.out')                                              

call qp2term开始为我工作:

> echo "&1" > input.txt                                    
echo "&1" > input.txt                                    
> cat input.txt                                            
cat input.txt                                            
&1                                                       
> sed -r 's/&1/Line 1 nLine 2n/' <input.txt >output.txt  
sed -r 's/&1/Line 1 nLine 2n/' <input.txt >output.txt  
> cat output.txt                                           
cat output.txt                                           
Line 1                                                   
Line 2                                                   

但是,我从QSH得到了和你一样的行为。

QSH CMD('sed -C 819  ''s/&1/Line 1 nLine 2n/'' <input.txt >output2.txt')
QSH CMD('cat output2.txt') 
Line 1 nLine 2n                      
Press ENTER to end terminal session. 

我的猜测是它必须做CCSID。即使使用- c 819开关,输出文件也是CCSID 37 - ebcdic。

最新更新