linux写文件的几种方法
  Qn0V923SdTA7 2023年11月13日 26 0


如果要写一个文件,名字叫 test.txt,准备写入下面的内容

123
456

有以下几种方法

一. 用工具vi或者vim

vi  test.txt

然后输入内容,存盘退出

二. 用 echo 重定向输入

每一行用一个 echo 命令

echo   '123'  >  test.txt
echo   '456'  >>  test.txt

第一条命令创建新文件 test.txt 并写入123 第二条命令在文件 test.txt 最后追加写入 456 注意: 创建新文件用 > 在末尾追加用 >> 这种方法特别适合在文件的末尾加几行文字,使用单引号是按原样写入。

三.用 cat 重定向输入

输入下面的语句:

cat  >  test.txt
123
456

最后按 ctrl-d 就写入成功。

如果不想最后按 ctrl-d 就这样写:

cat  >  test.txt   << eof
123
456
eof

这样就写入成功 如果上面要写入的文件内容比较多,可以复制粘贴。

四.用流编辑器 sed

sed 可以向文件的末尾追加写入内容,但文件必须先存在,而且也不能是空的,比如你用

touch  test.txt

创建了文件test.txt但它是空的,也追加不进去,这个时候你可以先用

echo '######'   >  test.txt

建立一个文件,第一行是注释符号,后面再追加。

sed 可以向文件test.txt 的末尾追加写入内容,命令格式为:

sed  -i  '$    a追加的内容'    test.txt

解释一下:$ 表示末尾 a 是增加的意思

如果你不加选项 -i 就只是测试,只显示出改写后的样式,不会真的改写,以免出错。当你确定修改正确后再加 -i 可以更保险。

如果追加的内容是多行,可以这样写 第一行\n第二行\n第三行 其中的\n表示回车换行,这样就把写成一行的内容变成了多行内容

总结起来就是这样:

echo '######'   >  test.txt
sed  -i  '$    a第一行\n第二行\n第三行'    test.txt

我们还可以用变量来简化一下,写成下面的样子:

echo '######'   >  test.txt
x='第一行\n第二行\n第三行'                          #用变量x来存放文字内容,用单引号比较好
sed  -i  "$    a$x"    test.txt                   #这里改用双引号

如果你希望把上面的方式,真的写成多行,可以在换行的地方加反斜杠,取消换行,像下面这样写:

echo '######'   >  test.txt
sed  -i  '$    a\
第一行\n\
第二行\n\
第三行'    test.txt

上面的技巧就是用反斜杠表示不换行,把一行写成多行,让我们能看清每一行。

如果要用变量x先存放各行内容,下面这样写:

echo '######'   >  test.txt
x='\
第一行\n\
第二行\n\
第三行'
sed  -i  "$    a$x"    test.txt

这种写法很实用,因为即使它的每行内容中包容linux写文件的几种方法_反斜杠符号前面加反斜杠转义.

五. 注意事项

1. echo 要打印出原样的字符需要用单引号,如果用双引号会把一些特殊符号解读为特殊含义。

比如:

echo   "$x"

会打印出x的值,没有赋值的话,打印出空白。它把$x当成引用这个变量。你想打印出 $x , 需要这样:

echo  '$x'

就是改成用单引号,如果你实在想用双引号,就在特殊符号前加反斜杠转义

echo  "\$x"

2. 使用 cat 的方式写文件,对$符号也要加反斜杠转义

3. 重定向 符号 > 是抹掉原来文件的全部内容重写,文件不存在就创建。如果写错了重新再来一次就可以了。

4. 重定向 符号 > > 是在原来文件的后面写入,增加行。如果写错了,得先去把原来的删除,再来写第二次。而删除你得用其它的工具去做,比如 vim 等。

5. cat 也可以追加写入,用 cat >> 文件名

6. sed的功能更强大,不但可以在末尾追加,也可以在任意位置插入,还可以替换。

上面的众多方法,可能会因linux的版本不同,而出现打印格式的差别,请自行测试。 不过我认为用printf最为方便,它是一个C语言的命令,格式与C语言中的规定一致,

printf '%s\n' 第一行 第二行 第三行

大体上可以这样理解: %s 表示打印的是字符串
\n 表示每打印一个都换行 每一行文字是一个字符串,中间隔一个空隔区分开 问题是,如果一行的文字中本身就包含空格,那就会中间换行了,这个时候,你只能在一行的两端加单引号解决。这个又弄复杂了,所以还是sed的方式管用。 如果希望写成多行,列容易区分,就这样写:

printf '%s\n' \
第一行 \
第二行 \
第三行\

注意反斜杠前面的空格。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  sX9JkgY3DY86   2023年11月13日   42   0   0 idesedImage
  sX9JkgY3DY86   2023年11月13日   42   0   0 idesedflutter
  sX9JkgY3DY86   2023年11月13日   37   0   0 ideTextsed
  nQkVcpdWfLDr   2023年11月13日   28   0   0 cisedLua
  sX9JkgY3DY86   2023年11月13日   32   0   0 Textsed
Qn0V923SdTA7