gpt4 book ai didi

linux - 如何在unix中修改同一个文件?

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:01 33 4
gpt4 key购买 nike

我正在使用下面的命令来修改文件的内容,但我想在我试图修改的同一个文件中重写这个命令的输出。谁能帮忙。

cat file.csv | tr -d " \t\n\r" | tr '|' '\n' |sed "s/.$//" >  file.csv 

输入数据:

330000,     200000,       ,    ,    xbdcb,   rrrrrr,   N,     
N, 2018-06-14,N,|,

330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,

330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,

330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,

预期输出:

330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N

最佳答案

使用当前命令的快速和肮脏的技巧:

(cat file.csv | tr -d ' \t\n\r' | tr '|' '\n' |sed "s/.$//" >  file2.csv && mv file2.csv file.csv)

解释:

&& mv file2.csv file csv 添加到您的命令将在且仅当第一个命令成功完成时触发移动操作。

话虽这么说,你当前的命令应该被简化!!!示例:当您可以重定向 stdin

时,避免使用 catpipe
(tr -d ' \t\n\r' < file.csv | tr '|' '\n' |sed "s/.$//" >  file2.csv && mv file2.csv file.csv)

在编辑之后让我向您介绍一个内联命令,它将直接修改文件而不创建任何中间文件,为此我使用 sed

输入:

$ more file.csv 
330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,

330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,

330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,

330000, 200000, , , xbdcb, rrrrrr, N,
N, 2018-06-14,N,|,

命令:

$ sed -n -i.bak 'h;n;H;n;x;s/[\n ]//g;s/,|,$//;p' file.csv

编辑后的文件:

$ more file.csv
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N
330000,200000,,,xbdcb,rrrrrr,N,N,2018-06-14,N

解释:

  • -n 选项用于禁止sed默认打印
  • -i.bak 是在线修改文件并备份 .bak 文件,如果您确定要做什么,请将此更改为 -i, sed 会直接修改文件而不做任何备份
  • h;n; -> h 将当前行的内容存入hold buffer并转到下一行n
  • H;n; -> H 将当前行附加到保持缓冲区并转到下一行
  • x;交换模式缓冲区和保持缓冲区以执行修改和打印
  • s/[\n ]//g 从模式缓冲区中删除所有空格和 EOL
  • s/,|,$// 去掉行尾的,|,
  • p 打印模式缓冲区

最后但并非最不重要的一点是,如果您在示例中显示的空行更多,请使用:

$ sed -n -i.bak '/^ *$/!{h;n;H;x;s/[\n ]//g;s/,|,$//;p}' file.csv  

关于linux - 如何在unix中修改同一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50791104/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com