yae*_*ael 9 sed awk perl text-processing
如何从 Linux 上的文件中删除最后一个逗号分隔符?
文件示例:
"is_supported_kafka_ranger" : "true",
"kafka_log_dir" : "/var/log/kafka",
"kafka_pid_dir" : "/var/run/kafka",
"kafka_user" : "kafka",
"kafka_user_nofile_limit" : "128000",
"kafka_user_nproc_limit" : "65536",
Run Code Online (Sandbox Code Playgroud)
预期成绩:
"is_supported_kafka_ranger" : "true",
"kafka_log_dir" : "/var/log/kafka",
"kafka_pid_dir" : "/var/run/kafka",
"kafka_user" : "kafka",
"kafka_user_nofile_limit" : "128000",
"kafka_user_nproc_limit" : "65536"
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 22
使用 GNU sed
:
sed -i '$s/,$//' file
Run Code Online (Sandbox Code Playgroud)
也就是说,在最后一行 ( $
) 上用s
空代替 ( ) 行 ( ,$
)末尾的逗号。
由于-i
标志,更改将就地完成。
标准sed
:
sed '$s/,$//' <file >file.new &&
mv file.new file
Run Code Online (Sandbox Code Playgroud)
注意:有人建议将“在最后一行”更改为“最后一行”(或类似内容)进行编辑。这是错误的。当$
用于指定地址(应用编辑命令的行)时,它指的是流或文件的最后一行。这与$
在正则表达式中使用不同。
对于就地编辑,您可以使用ed
- 方便地,它在打开时默认将位置设置为最后一行,因此您无需明确解决最后一行:
ed file
s/,$//
wq
Run Code Online (Sandbox Code Playgroud)
或者,作为单线
printf 's/,$//\nwq\n' | ed -s file
Run Code Online (Sandbox Code Playgroud)
一般来说,我可能会采用直接的sed
解决方案。但是,如果您的输入文件很大,您可能需要一个解决方案,它不需要花时间阅读整个文件来编辑最后几个字节。
如果您 100% 确定您的输入文件以逗号和换行符结尾,您可以使用truncate
删除最后两个字符,然后重新附加最后的换行符:
filesize=$(stat -L --format "%s" lastcomma.txt)
truncate --size $((filesize - 2)) lastcomma.txt
echo >> lastcomma.txt
Run Code Online (Sandbox Code Playgroud)
这假设发行版包含 GNU 截断或等效版本。
@StéphaneChazelas 指出GNUtruncate
现在支持truncate -s -2 file
将文件缩短两个字节;如果你有这个版本,上面的简化为:
truncate --size -2 lastcomma.txt
echo >> lastcomma.txt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4160 次 |
最近记录: |