如何从给定范围内删除文本文件中的随机行?

des*_*ukh 5 vim text command-line bash text-processing

我有一个文本文件,我想从一个范围中删除随机行。下面是一个例子:

Line 1: abcd
Line 2: efgh
Line 3: ijkl
Line 4: mnop
Line 5: qrst
Line 6: uvwxyz
Run Code Online (Sandbox Code Playgroud)

在这六个中,我想随机删除 3 个。

如何做到这一点?如果 vim 中有解决方案就太好了,这样就可以将其应用于不同的范围。

ish*_*ish 7

这是使用的解决方案sed

sed -i $(( start + RANDOM % range ))d filename.txt

在哪里:

  • start是您的范围的开始行号
  • range(或end-start是从start 开始包含的行数)
  • sed -i -Nd告诉sed删除输入文件中的第 N 行
  • RANDOM是 bash 的随机数生成器;一个特殊的 shell 变量,当您使用它时,它会保存 0 到 32767 之间的随机整数。

因此,例如,要删除文件test.txt 中第 90 行和第 120 行之间的随机行,您可以使用:

sed -i $(( 90 + RANDOM % 30 ))d test.txt