创建包含内容的文件,其中内容有新行

创建包含内容的文件,其中内容有新行

在Linux中,如何创建文件带有 \n (或任何行分隔符)的单行内容被转换为多行。

fileA.txt:
trans_fileA::abcd\ndfghc\n091873\nhhjj 
trans_fileB::a11d\n11hc\n73345

代码:

while read line; do
         file_name=`echo $line | awk -F'::' '{print $1}' `
         file_content=`echo $line | awk -F'::' '{print $2}' `
             echo $file_name
             echo $(eval echo ${file_content}) 
         echo $(eval echo ${file_content}) > fileA.txt

trans_fileA 应该是:

abcd
dfghc
091873
hhjj

请建议

答案1

使用bash外壳:

while IFS= read -r line; do
    name=${line%%::*}
    contents=${line#*::}

    echo -e "$contents" >"$name"
done <fileA.txt

这会逐行读取输入文件,并使用以下命令从读取行中提取输出文件名和内容标准参数替换。 从匹配项${variable%%pattern}的尾部删除最长的匹配子字符串,同时从匹配项的开头删除最短的匹配子字符串。$variablepattern${variable#pattern}$variablepattern

line读取的值read -r,以便反斜杠是保留在数据中。如果没有-rread就不会保留这些。我们还在IFS调用之前设置为空字符串,read以便不会从数据中删除侧翼空白。

输出是使用 完成的echo -e,其中解释数据中的转义序列。这意味着它将\n用实际的换行符替换数据中的 。

运行此命令后,您将获得

$ ls -l
total 12
-rw-r--r--  1 kk  wheel  71 Jun 17 16:28 fileA.txt
-rw-r--r--  1 kk  wheel  24 Jun 17 16:31 trans_fileA
-rw-r--r--  1 kk  wheel  16 Jun 17 16:31 trans_fileB
$ cat trans_fileA
abcd
dfghc
091873
hhjj
$ cat trans_fileB
a11d
11hc
73345

有关的:

答案2

我的第一个想法是sed 鉴于您的文件 fileA.txt 上面:

abcd\ndfghc\n091873\nhhjj

并运行sed其中newline.sed包含:

s/\\n/\
/g

就这样

sed -f ./newline.sed <./fileA.txt >./trans_fileA

将返回这些结果trans_fileA

abcd
dfghc
091873
hhjj

这是我能想到的完成你的任务的最简单的方法。

华泰

相关内容