Linux的实用命令(四)之替换sed命令和特殊字符处理

Linux中的特殊字符的处理

1、windows和linux环境下的换行符号处理:
Windows系统中有如下等价关系:
   用enter换行 <====> 程序写\n  <====> 真正朝文件中写\r\n(0x0d0x0a) <====>程序真正读取的是\n
linux系统中的等价关系:
   用enter换行 <====> 程序写\n  <====> 真正朝文件中写\n(0x0a)  <====> 程序真正读取的是\n

实际上Windows上的文件是dos格式的, 而linux上的文件是unix格式的, 我们可以通过linux上的dos2unix和unix2dos来实现转化

** 怎么查看文件格式?**
vi filename
然后执行 :set ff查看一下,结果发现fileformat=dos 那么该文件是windows格式, 如果发现fileformat=unix则文件是linux格式。
在这里插入图片描述
如果是直接复制windows上编辑好的filename(filename可以是脚本文件,或者是普通文件)导linux上来执行的报错的话:
方法一:直接执行 sed -i “s/\r//” filename 来转化, 然后就可以执行filename运行脚本了
方法二: 直接执行 dos2unix filename 来转化, 然后就可以执行filename运行脚本了。(我的linux上执行dos2unix filename失败, 但是不要放弃啊, 加个busybox就可以了)
在这里插入图片描述

2、 linux环境下的特殊不可见字符 处理:

1) 查看文件中特殊不可见字符
正常执行查看文件前20行: head -n 20 filename
查看文件中(带不可见字符 ): head -n 20 filename | od -c

2)sed命令
标准用法: sed “s/被替换的字符/替换后的字符/g” (如果又必要替换和被替换的字符需要加转义符号反斜杠 \)
ASCII码 0x1F(0x只是代表是哪个编码集,1F才是对应的代表单元分割符US,肉眼不可见字符,0x7c中的7c代表竖线|分割符)
sed “s/\x7c/\x1F/g” —这个意思是把肉眼不可见分割符换成竖线分割符。

原始数据1.dat 里面有1行数据: 1|2
需求:把\x7c 换成\x1F
tail 1.dat | sed “s/\x7c/\x1F/g” —结果是1 2
在这里插入图片描述
替换文件的分割符(1.csv的文件中的空格替换成逗号并生成另外一个文件2.csv)
sed ‘s/ /,/g’ 1.csv >2.csv

删除文件特定行
删除第一行
sed -i ‘1d’ filename
范围删除,删除1-3行
sed -i ‘1,3d’ filename
删除第n行
sed -i ‘nd’ filename
删除最后一行
sed -i ‘$d’ filename

3) echo 命令
-e:激活转义字符。使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

使用方法:echo -e " 下面的特殊字符 "
\a 发出警告声;

\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;

例子:
vi 1.sh

# !/bin/sh
echo -e "hello \c"
echo "world"   

最后sh 1.sh 打印出来的是hello world , \c 是为了不换行。

4) if 判断中参数

[-z string] “string”的长度为零则为真
[string1 -o string2] “string” 表示或者,string1或者string2

标准格式:
if [ -z 字符串1 -o -z 字符串2] ; then
fi

例子:
在这里插入图片描述
意思是如果" H D F S P A T H " 是 空 或 者 " {HDFS_PATH}" 是空或者 " HDFSPATH""{LOCAL_PATH}" 是空 或者" F I L E N A M E " 是 空 或 者 " {FILE_NAME}" 是空 或者 " FILENAME""{STAT_TIME}" 是空 或者"${VERF_FILE_DELIMITED}" 是空。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用sed命令将空格替换成回车,具体命令如下: ``` sed 's/ /\n/g' filename ``` 其中,s表示替换操作,/ /表示要替换的空格,\n表示回车,g表示全局替换,filename表示要操作的文件名。 上述命令的含义是将filename文件中的所有空格都替换成回车,并输出结果到标准输出。如果需要将结果保存到文件中,可以使用重定向操作符(>)。例如: ``` sed 's/ /\n/g' filename > newfile ``` 这个命令的含义是将filename文件中的所有空格都替换成回车,并将结果保存到newfile文件中。 ### 回答2: 在Linux中,sed命令是一种用于对文本进行流编辑的强大工具。要将空格替换为回车,可以使用sed命令的s命令来完成。 要在一行文本中将空格替换为回车,可以使用以下命令sed 's/ /\ /g' 其中,s表示进行替换操作,/ /表示要替换的模式,\表示回车符,g表示全局替换,即替换每个匹配的空格。 对于多行文本,可以将文件作为输入,并使用同样的命令sed 's/ /\ /g' filename.txt 其中,filename.txt是要进行操作的文件名。 此命令将把每个空格替换为回车,并将修改后的文本输出到终端。如果要将结果保存到文件中,可以使用重定向符号将输出重定向到一个新文件中: sed 's/ /\ /g' filename.txt > newfile.txt 这样,新的文件newfile.txt将包含替换后的文本。 sed命令是一个非常强大的编辑工具,它支持很多其他的操作和选项,可以根据具体需求进行更复杂的文本处理。 ### 回答3: 在Linux中,使用sed命令将空格替换为回车是一个相对简单的操作。可以使用以下命令实现: ```shell sed 's/ /\n/g' filename ``` 其中,`filename`是要处理的文件名称。 这个命令中的`s/ /\n/g`表示将其中的一个空格替换为一个回车符,并且通过`g`选项实现全局替换,即将文件中的所有空格都替换为回车符。 这样,当命令执行后,空格字符就会被替换为回车符,从而实现了所需的操作。 需要注意的是,如果要直接修改源文件,可以使用`-i`选项: ```shell sed -i 's/ /\n/g' filename ``` 这样命令会直接修改`filename`文件中的内容,而不是在标准输出中显示结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值