如何在文本文件中向上或向下移动一行?

用户4443

我有一些文本文件,我希望能够在任何文件中的任意行或下移一行(文件开头或结尾的行将保留在原处)。我有一些有效的代码,但似乎有些杂乱无章,而且我不相信我涵盖了所有的极端情况,因此我想知道是否有某种工具或范例可以做到更好(例如,更容易理解代码(对于其他读者或我在6个月内),更易于调试,更易于维护;“更有效”并不是很重要)。

move_up() {
  # fetch line with head -<line number> | tail -1
  # insert that one line higher
  # delete the old line
  sed -i -e "$((line_number-1))i$(head -$line_number $file | tail -1)" -e "${line_number}d" "$file"
}

move_down() {
  file_length=$(wc -l < "$file")
  if [[ "$line_number" -ge $((file_length - 1)) ]]; then
    # sed can't insert past the end of the file, so append the line
    # then delete the old line
    echo $(head -$line_number "$file" | tail -1) >> "$file"
    sed -i "${line_number}d" "$file"
  else
    # get the line, and insert it after the next line, and delete the original
    sed -i -e "$((line_number+2))i$(head -$line_number $file | tail -1)" -e "${line_number}d" "$file"
  fi
}

我可以对这些函数内部或外部的输入进行错误检查,但是如果错误输入(如非整数,不存在的文件或行号大于文件长度的输入)得到了合理处理,则可以加分。

我希望它在现代Debian / Ubuntu系统上的Bash脚本中运行。我并不总是具有root用户访问权限,但可以期望安装“标准”工具(例如共享Web服务器),并且如果我可以证明请求的合理性也许可以请求安装其他工具(尽管更少的外部依赖关系总会更好)。

例子:

$ cat b
1
2
3
4
$ file=b line_number=3 move_up
$ cat b
1
3
2
4
$ file=b line_number=3 move_down
$ cat b
1
3
4
2
$ 
don_crissti

Archemar的建议类似,您可以使用以下脚本编写脚本ed

printf %s\\n ${linenr}m${addr} w q | ed -s infile

IE

linenr                      #  is the line number
m                           #  command that moves the line
addr=$(( linenr + 1 ))      #  if you move the line down
addr=$(( linenr - 2 ))      #  if you move the line up
w                           #  write changes to file
q                           #  quit editor

例如,移动行号。21一排:

printf %s\\n 21m19 w q | ed -s infile

移动行号 21向下一行:

printf %s\\n 21m22 w q | ed -s infile

但是,由于您只需要向上或向下移动某一行一行,因此您也可以说您实际上想交换两行连续的行。见面sed

sed -i -n 'addr{h;n;G};p' infile

IE

addr=${linenr}           # if you move the line down
addr=$(( linenr - 1 ))   # if you move the line up
h                        # replace content of the hold  buffer with a copy of the pattern space
n                        # read a new line replacing the current line in the pattern space  
G                        # append the content of the hold buffer to the pattern space
p                        # print the entire pattern space

例如,移动行号。21一排:

sed -i -n '20{h;n;G};p' infile

移动行号 21向下一行:

sed -i -n '21{h;n;G};p' infile

我在gnu sed上面使用了语法。如果要考虑可移植性:

sed -n 'addr{
h
n
G
}
p' infile

除此之外,通常检查:文件是否存在并且可写;file_length > 2; line_no. > 1; line_no. < file_length;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在附加文本文件时将指针向上移动一行

来自分类Dev

配置向上/向下箭头以在 html 表中向上/向下移动一行

来自分类Dev

如何在Excel 2007中将选择向下移动一行?

来自分类Dev

如何从文本文件中删除一行?

来自分类Dev

如何在文本文件中合并每一行及其后续行

来自分类Dev

如何在文本文件C ++中查找和替换一行数据

来自分类Dev

如何在文本文件中编辑一行数据

来自分类Dev

如何在c#中从一行删除到文本文件的末尾?

来自分类Dev

如何在eclipse中向上/向下移动项目?

来自分类常见问题

如何在Mac的Visual Studio Code中向上或向下移动行

来自分类Dev

如何在不重命名文件的情况下从文本文件中的一行中删除字符?

来自分类Dev

如何在16位代码中将光标向下移动一行?

来自分类Dev

如何在PhpStorm中进行评论时停止向下移动一行?

来自分类Dev

如何获取输入文本文件的第一行,同时从文本文件中删除该行

来自分类Dev

如何在现有文本文件中的python中的一行中添加字符?

来自分类Dev

如何在多个文本文件中移动行?

来自分类Dev

如何在node.js中的文本文件中添加第一行(使用fs)

来自分类Dev

如何在文本文件的第二行上写而忽略第一行?

来自分类Dev

删除文本文件中的最后一行

来自分类Dev

从文本文件中的一行删除单词

来自分类Dev

如何在Java中读取文本文件的第一行并将其打印出来?

来自分类Dev

如何从C#文本文件中的一行中获取10行以下

来自分类Dev

VB如何根据用户选择从文本文件中调出一行文本?

来自分类Dev

向下移动单元格在单词中添加一行而不向下移动单元格

来自分类Dev

如何使用Delphi读取文本文件中的最后一行

来自分类Dev

如何使用sed + regex在指定位置的文本文件中插入一行?

来自分类Dev

如何使用一行代码在Swift 2.0中读取文本文件

来自分类Dev

如何使用cmd在文本文件的第一行中编写?

来自分类Dev

Python 3+ 如何编辑文本文件中的一行

Related 相关文章

  1. 1

    如何在附加文本文件时将指针向上移动一行

  2. 2

    配置向上/向下箭头以在 html 表中向上/向下移动一行

  3. 3

    如何在Excel 2007中将选择向下移动一行?

  4. 4

    如何从文本文件中删除一行?

  5. 5

    如何在文本文件中合并每一行及其后续行

  6. 6

    如何在文本文件C ++中查找和替换一行数据

  7. 7

    如何在文本文件中编辑一行数据

  8. 8

    如何在c#中从一行删除到文本文件的末尾?

  9. 9

    如何在eclipse中向上/向下移动项目?

  10. 10

    如何在Mac的Visual Studio Code中向上或向下移动行

  11. 11

    如何在不重命名文件的情况下从文本文件中的一行中删除字符?

  12. 12

    如何在16位代码中将光标向下移动一行?

  13. 13

    如何在PhpStorm中进行评论时停止向下移动一行?

  14. 14

    如何获取输入文本文件的第一行,同时从文本文件中删除该行

  15. 15

    如何在现有文本文件中的python中的一行中添加字符?

  16. 16

    如何在多个文本文件中移动行?

  17. 17

    如何在node.js中的文本文件中添加第一行(使用fs)

  18. 18

    如何在文本文件的第二行上写而忽略第一行?

  19. 19

    删除文本文件中的最后一行

  20. 20

    从文本文件中的一行删除单词

  21. 21

    如何在Java中读取文本文件的第一行并将其打印出来?

  22. 22

    如何从C#文本文件中的一行中获取10行以下

  23. 23

    VB如何根据用户选择从文本文件中调出一行文本?

  24. 24

    向下移动单元格在单词中添加一行而不向下移动单元格

  25. 25

    如何使用Delphi读取文本文件中的最后一行

  26. 26

    如何使用sed + regex在指定位置的文本文件中插入一行?

  27. 27

    如何使用一行代码在Swift 2.0中读取文本文件

  28. 28

    如何使用cmd在文本文件的第一行中编写?

  29. 29

    Python 3+ 如何编辑文本文件中的一行

热门标签

归档