我有一个带有网格的svg文件,这些网格由行中包含单词use
的行表示。我想删除与use
模式匹配的特定数量的随机行,然后保存该文件的新版本。 This answer非常接近。
所以它将是这个的组合(删除特定范围内的一个随机行):
sed -i '.svg' $((9 + RANDOM % 579))d /filename.svg
和此(删除匹配模式use
的所有行):
sed -i '.svg' /use/d /filename.svg
换句话说,逻辑将是这样的:
sed -i delete 'x' number of RANDOM lines matching 'use' from 'input.svg' and save to 'output.svg'
我在Mac上从终端运行这些命令并且对语法缺乏经验,因此格式化命令是理想的。
答案 0 :(得分:1)
删除包含&#34的每一行;使用"概率为10%:
awk '!/use/ || rand() > 0.10' file
随机删除一行包含"使用":
awk -v n="$(( RANDOM % $(grep -c "use" file) ))" '!/use/ || n-- != 0' file
这是一个示例调用:
$ cat file
some string
a line containing "use"
another use-ful line
more random data
$ awk -v n="$(( RANDOM % $(grep -c "use" file) ))" '!/use/ || n-- != 0' file
some string
another use-ful line
more random data
删除了包含use
的其中一行。
答案 1 :(得分:0)
这可能适合你:( GNU sed& sort):
sed -n '/\<use\>/=' file | sort -r | head -5 | sed 's/$/d/' | sed -i.bak -f - file
从文件中提取包含单词use
的行的行号。随机排序这些行号然后取第一个说5并构建一个sed脚本从原始文件中删除它们。