是否可以编写一个脚本,将“#”附加到以大写字母开头的文件的任何行?

是否可以编写一个脚本,将“#”附加到以大写字母开头的文件的任何行?

为了使学校项目更容易,我想在 bash 脚本中向以大写字母开头的每一行附加一个分隔符。有人可以帮我吗?我尝试与 case 命令一起逐行读取文件,但它不起作用我真的不明白我在做什么。这就是我到目前为止所拥有的:(我是脚本编写新手,不要激怒我)

#!/bin/bash
input=/home/user/file
while IFS= read -r var
do
        case [A-Z]
                sed 's/^/#/' file
done

答案1

您不使用 shell 循环来处理文本。处理文本是由文本处理工具完成的,这些工具一次处理一行输入:

#! /bin/sh -
input=/home/user/file
sed 's/^[[:upper:]]/#&/' < "$input"

将在每行的#start() 处的大写字母之前插入。^$input

这里,大写字母由区域设置决定。它将包括 ABCDEFGHIJKLMNOPQRSTUVWXYZ 英文字母,还可能包括 Á、Ź 或 Π(如果存在)。

如果您只想限制为 ABCDEFGHIJKLMNOPQRSTUVWXYZ,您可以编写:

sed 's/^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/#&/' < "$input"

[A-Z]其本身可能会匹配任何内容,具体取决于区域设置。您会发现它也匹配abcdefghijklmnopqrstuvwxy(not ) 的系统。z在大多数系统上,如果存在于区域设置的字符映射中,它将匹配 Á,但不匹配 Ź。它甚至可以匹配字符序列(多字符整理元素,如匈牙利语Ddzs)。

相关内容