我有一个如下所示的文本文件:
FD488AFF,
FED6ECFF,
FFA2A2FF,
FFD7D8FF,
(
)
最后一个字符之后还有一个换行符)
。我正在使用 macOS 终端并寻找一种方法来删除最后一个逗号, 这(,以及最后一个),以及返回其后的字符。
,
(
)
以及最后一个字符后面的新行字符)性格,但我似乎无法让它发挥作用。我不必使用sed
,但它确实需要使用终端。
答案1
反转文件,删除前 2 行并删除第 3 行的逗号。然后重新反转结果。
tac file | sed '1,2d; 3s/,$//' | tac
保存回同一个文件:
... | tac > tmp && mv tmp file
或者,使用包sponge
中的moreutils
:
... | tac | sponge file
再想一想,这将是一个很好的方法:ed 实际上是一个文件编辑器这样您就可以进行编辑并保存。
ed file <<'END'
$-1,$d
$s/,$//
wq
END
答案2
不是最有效的,但应该可以完成工作:
sed '$d' file | sed '$d' | sed '$s/,$//'
FD488AFF,
FED6ECFF,
FFA2A2FF,
FFD7D8FF
答案3
要删除最后两行(如果它们分别包含左括号和右括号以及它们前面的逗号),您可以使用滑动窗口:
sed '1N;$!N;${
s/,\n(\n)//
}
P;D' infile
N
当在st 线上时,这会拉入一条ew 线1
,然后它总是在模式空间中保留三行(通过N;P;D cycle
)。当到达 la $
t 行时,它会尝试1删除一个逗号,后跟一个\n
ewline、a (
、另一个\n
ewline 和 a)
1:无需在此处锚定,因为模式空间中任何时候都不能超过三行
答案4
按内容删除最后两行
参见@LewisM的回答https://unix.stackexchange.com/a/483043/4778
按位置删除最后两行,并从末尾删除第三行的逗号。
< «file-name» head -n -2 | sed -r -e '$ s/,$//'
或者
< «file-name» sed -nr -e 'x;${d;x;d};1d;p' | sed -r -e '$ s/,$//'