大文字で始まるファイル行に「#」を追加するスクリプトを作成できますか?

大文字で始まるファイル行に「#」を追加するスクリプトを作成できますか?

学校のプロジェクトを簡単にするために、bashスクリプトで大文字で始まる各行に区切り文字を追加したいと思います。誰でも私を助けることができますか? caseコマンドを使用してファイルを1行ずつ読み取ろうとしましたが、機能しません。私が何をしているのか本当に理解できません。これが私が今まで持っているものです:(私はスクリプトが初めてです。怒らないでください)

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

答え1

テキストを処理するためにシェルループを使用しません。。テキスト処理は、一度に1行ずつ入力を処理するテキスト処理ツールを介して行われます。

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

各行の start() で大文字の前に挿入されます#^$input

ここで、大文字はロケール設定によって決まります。これにはABCDEFGHIJKLMNOPQRSTUVWXYZ文字が含まれており、存在する場合はÁ、Ź、またはΠも含めることができます。

ABCDEFGHIJKLMNOPQRSTUVWXYZにのみ制限するには、次のように書くことができます。

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

[A-Z]それ自体は、ロケールに応じて何でも一致できます。あなたはそれがabcdefghijklmnopqrstuvwxyシステムとも一致することがわかります。zほとんどのシステムでは Á と一致しますが、ロケールの文字マップにある場合は Ź と一致しません。文字シーケンス(ハンガリー語などの複数文字の組み合わせ要素Ddzs)とも一致できます。

関連情報