在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}
的尾部删除最长的匹配子字符串,同时从匹配项的开头删除最短的匹配子字符串。$variable
pattern
${variable#pattern}
$variable
pattern
line
读取的值read -r
,以便反斜杠是保留在数据中。如果没有-r
,read
就不会保留这些。我们还在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
这是我能想到的完成你的任务的最简单的方法。
华泰