LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1689|回复: 8

在其它站看到的一个问题,反正没事,大家看看.

[复制链接]
发表于 2003-2-9 10:46:01 | 显示全部楼层 |阅读模式
怎样将\n换成换行符??   

--------------------------------------------------------------------------------

例如有文本如下:
abcd\nabcde
cdef\nmmmini
qqqmad\nnnnnnn

将粗体部分换成换行符后应是:
abcd
abcde
cdef
mmmini
qqqmad
nnnnnn

如何做??
 楼主| 发表于 2003-2-9 10:47:04 | 显示全部楼层
我想到的两种方法:

方法1:

  1. while read strings; do
  2.         echo -e $strings
  3. done < file
复制代码

方法2:

  1. #!/bin/bash
  2. string="FreeBSD\nNetBSD\nLinux\nSolaris"

  3. :
  4. while [ $? = 0 ]; do
  5.         temp=${string%%\\n*}
  6.         echo $temp
  7.         string=${string#${temp}\\n}

  8.         echo $string | grep \\n > /dev/null

  9.         if [ $? != 0 ]; then
  10.                 echo $string
  11.                 false
  12.         fi
  13. done
复制代码


大家看看还有没有其它更简便的方法.
发表于 2003-2-9 11:16:34 | 显示全部楼层
我刚才查了一下sed的man 文档,现在的sed版本可以支持在正则表达式中换行,所以可以直接用sed来处理。
[kj501@c4 kj501]$ cat kk
abcd\nabcde
cdef\nmmmini
qqqmad\nnnnnnn
[kj501@c4 kj501]$ cat kk | sed 's/\\n/\
/'
abcd
abcde
cdef
mmmini
qqqmad
nnnnnn
[kj501@c4 kj501]$
发表于 2003-2-9 13:09:33 | 显示全部楼层
kj兄的方法不行呀?!
出错信息:
javalee//home/javalee:cat kk | sed 's/\\n/\/'
sed: -e expression #1, char 8: Unterminated `s' command

sed版本:GNU sed version 3.02
linux版本:rh8.0 内核:2.4.18-14
shell:ksh/bash
 楼主| 发表于 2003-2-9 14:05:09 | 显示全部楼层
kj的意思是要在输入命令的时候换行,即:
cat kk | sed 's/\\n/\
/'

而不是:
cat kk | sed 's/\\n/\/'
发表于 2003-2-9 14:15:49 | 显示全部楼层
谢谢plan9兄。我可能在贴子中没有讲清楚。
发表于 2003-2-9 15:57:42 | 显示全部楼层
I see....thanks
发表于 2003-2-9 16:00:05 | 显示全部楼层
也可以这样实现

sed -e 's/[:\:]n/@/g' test.txt | tr '@' '\n'
 楼主| 发表于 2003-2-11 13:09:04 | 显示全部楼层
最初由 artou 发布
也可以这样实现

sed -e 's/[:\:]n/@/g' test.txt | tr '@' '\n'


当然,这样最简单:
echo "Hello\nBoys\nAnd\nGirls" | tr '\\\\n' '\n'
不过我只在gentoo上测试过,好像sco上不能成功。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表