小编bit*_*bit的帖子

在文本文件中的另一行之前移动文本文件中的一行的最快方法?

我有一个文本文件中的第 55 行,我想在同一个文本文件中的第 23 行之前移动它。我知道您可以将行向上移动一定数量的12行,但是是否可以将一行附加或预先添加到另一行,而不是在文本文件中向上或向下移动行的冗长方式?

我对使用 vim、sed 或任何其他命令行工具的答案持开放态度,但越简洁越好

更新:

sed命令i在一行之前插入文本,这与我要查找的内容相似,只是我想在一行之前插入一行

command-line vim sed text-processing text-formatting

7
推荐指数
1
解决办法
3221
查看次数

为什么 lsblk 显示已格式化设备的旧 FSTYPE 和 LABEL?

我使用parted将外部硬盘驱动器(sdc)格式化为ntfs,创建一个主分区(sdc1)。在格式化设备之前,使用命令将SystemRescueCd安装在外部硬盘驱动器上dd,以便用作可启动 USB。但是,当列出设备时lsblk -f我仍然得到格式化设备(sdc)的旧FSTYPE(iso9660)和LABEL(sysrcd-5.2.2):

\n\n
NAME       FSTYPE      LABEL           UUID   MOUNTPOINT\nsda                                                                            \n\xe2\x94\x9c\xe2\x94\x80sda1     ntfs        System Reserved                       \n\xe2\x94\x9c\xe2\x94\x80sda2     ntfs                                               \n\xe2\x94\x9c\xe2\x94\x80sda3     ntfs                                               \n\xe2\x94\x9c\xe2\x94\x80sda4                                                                         \nsdc        iso9660     sysrcd-5.2.2                     \n\xe2\x94\x94\xe2\x94\x80sdc1     ntfs        sysrcd-5.2.2          /run/media/user/sysrcd-5.2.2\n
Run Code Online (Sandbox Code Playgroud)\n\n

如图所示,lsblk -f只有分区的FSTYPEsdc1是正确的,sdc1分区的LABEL、sdc块设备的FSTYPE和LABEL都是错误的。nautilus GUI 应用程序还显示旧设备标签 (sysrcd-5.2.2)。

\n\n

创建新的分区表后,建议我在将设备格式化为ntfsparted之前重新启动系统,但我决定卸载 sdc 而不是重新启动。

\n\n
    \n
  • 难道是因为我没有重新启动系统,内核仍在使用旧的 FSTYPE 和 LABEL 吗?我是否必须重新启动系统才能删除旧的 FSTYPE 和 LABEL?
  • \n
  • 作为重新启动的替代方法,是否有一种方法可以手动重命名块设备的 FSTYPE 和 LABEL,以便我可以将它们更改为外部硬盘驱动器附带的原始 FSTYPE 和 LABEL?
  • \n
\n

linux partition kernel parted block-device

6
推荐指数
1
解决办法
8331
查看次数

如何从命令行使用 flatpak okular 打开文件?

我有一个与 flatpak 一起安装的 okular 别名,设置如下:

alias okular="org.kde.okular"

它可以从终端打开。但是,如果我尝试使用该别名从终端打开文件,例如:

okular document.pdf

那么就不行了。我究竟做错了什么?

有没有办法使用 okular flatpak 在终端中打开文件,而不是使用 GUI?

更新:

所以我找到了这个链接

--file-forwarding 如果指定此选项,则扫描剩余的参数,并且包含在一对“@@”参数之间的所有参数都被解释为文件路径,在文档存储中导出,并传递给命令结果文档路径的形式。'@@u' 和 '@@' 之间的参数被视为 uri,并且任何 file: uri 都会被导出。导出是非持久性的,并且具有应用程序的读写权限。

当然,这并不意味着使用 okular flatpak 在终端中打开文件的唯一方法是执行以下操作:

flatpak run okular.kde.org --file-forwarding @/home/user/documents/document.pdf@

我无法对每个要打开的 pdf 都执行此操作。如何将其添加为别名,以便在打开不同的 pdf 时不需要键入很长的命令?

linux command-line terminal okular flatpak

5
推荐指数
1
解决办法
2407
查看次数

如何从管道中 grep 多个模式

我想在列表中找到三个模式。我试着打字

$ pip3 list | grep -ei foo -ei bar -ei baz
Run Code Online (Sandbox Code Playgroud)

但是外壳会抛出一个broken pipe error和一个大的Traceback.

我如何处理grep从通过管道传输到的列表中传递的多个模式grep

shell grep quoting regular-expression

4
推荐指数
2
解决办法
2万
查看次数

如何防止命令行上的命令替换?

我发现在将文本作为另一个程序的输入写入时,预期文本中双引号中的任何命令替换都会被 shell 解释和扩展

此处答案中的链接指出单引号可用于防止参数扩展或命令替换。但是我发现用单引号括起命令替换也无法阻止 shell 扩展命令替换

您如何防止 shell 解释旨在作为文本而不是要执行的命令的命令替换?

示范

$ echo "`wc -l *`"
Run Code Online (Sandbox Code Playgroud)

尝试计算当前目录中所有文件的行数

$ echo "'`wc -l *`'"
Run Code Online (Sandbox Code Playgroud)

结果相同,即计算当前目录下所有文件的行数

更新从这个演示中我发现问题似乎是我引用了单引号。我认为将单引号和`(反引号)括在双引号中可以保留(即抑制)单引号的字面意义,但不会保留引入命令替换的反引号(即反引号)的字面含义。

在我的用例中,需要引用另一个命令的输入。这份文件说:

单引号内不能出现单引号

当单引号命令替换在(双)引号字符串中时,如何防止单引号命令替换被扩展?除了使用反斜杠转义之外,应该有办法做到这一点

实际情况

在程序中,我使用将任务描述分成单独行的唯一方法是用双引号将描述括起来:

$ task add "first line doesn\'t say much
Second line says a lot but part of this line does not appear in the resulting description 'truncate -s0 !(temp_file | temp_dir)' truncates all files to 0 bytes as shown by: '`wc -l *`'"
Run Code Online (Sandbox Code Playgroud)

结果描述:

first …
Run Code Online (Sandbox Code Playgroud)

command-line shell bash quoting command-substitution

4
推荐指数
2
解决办法
2585
查看次数

printf 无法解释反斜杠和感叹号

我正在使用终端编写 Java 程序printf并将其输出重定向到.java文件,但printf无法解释水平反斜杠选项卡 ( \t),并且当我在字符串中有感叹号 (!) 时,它甚至不打印并失败这个错误:

bash: !": event not found

  • 如何强制 printf 包含水平制表符?

  • 以及如何在不出现上述错误的情况下包含感叹号?

命令行参数:

$ printf "%s\n" "public class {" "\tpublic static void main(String[] args) {" "dogBark()" "}" "public static void dogBark() {" "System.out.println("Woof")" "}" "}" > barkingDog.java
Run Code Online (Sandbox Code Playgroud)

.java文件输出

$ less barkingDog.java
public class {
\tpublic static void main(String[] args) {
dogBark()
}
public static void dogBark() {
System.out.println(Woof)
}

}
Run Code Online (Sandbox Code Playgroud)

command-line bash quoting printf

2
推荐指数
1
解决办法
1083
查看次数

awk 正则表达式中的操作和不区分大小写?

我正在尝试匹配包含两个文本模式的文件名,但匹配过程应该忽略大小写。以下正则表达式都不起作用:

将 awk 变量 'IGNORECASE' 设置为非零值(如 中推荐的那样info awk),以便所有正则表达式和字符串操作忽略大小写,然后使用两个正则表达式构建逻辑“与”操作将打印所有文件:

$ ls -R | awk 'IGNORECASE = 1;/bingo/ && /number/;'
Run Code Online (Sandbox Code Playgroud)


在使用前瞻(我知道不需要第二个前瞻)之前,我尝试将数据转换为小写字母以匹配文本模式“bingo”和“number”。但是 awk 不打印任何输出,默认情况下应该是1 , 2

$ ls -R | awk 'tolower($0) ~ /(?=.*bingo)(?=.*number)/'
Run Code Online (Sandbox Code Playgroud)

awk 或正则表达式语法的哪一部分是错误的(或缺少什么),以及仅当附加模式出现​​在同一行时才成功的独立于大小写的搜索的正确方法是什么?

更新:

从跑步开始

$ ls -R | awk '/bingo/'
Run Code Online (Sandbox Code Playgroud)

似乎awk可以在每个文件中的输出进行针对行中的匹配ls -R由于不包含字符串常量“宾果”由相匹配的文件名awk。如果是这种情况,您如何获得awkgrep从(即通过)管道接收输出时相同的行为?

linux bash awk text-processing regular-expression

0
推荐指数
1
解决办法
715
查看次数