Bash:ファイルの行へのパスまたはリンク?

Bash:ファイルの行へのパスまたはリンク?
/path/to/fname#line1242

パス名の一部としてファイルの特定の行番号を参照する方法はありますか?パックパス名のように見える、または機能する行番号へのリンク?たとえば、同じファイルシステム上の他のユーザーに上記の文字列を提供すると、そのユーザーは自分のファイル「fname」を簡単に開き、そのファイルの1242行目にすぐにアクセスできます。

私は、ページのURIに含まれる次のリンクのように動作できるHTMLアンカーに似た動作について考えています。つまり、同じファイルシステム上の他のユーザーに提供でき、そのユーザーにファイルがデフォルトで開かれているファイルの特定の行を表示できます。私はUNIXが唯一の方法であることに気づきました。本当にパス名の一部は、ディレクトリ、ファイル、および擬似ファイルです。ただし、パス名の一部ではありませんが、「快適に」挿入でき、追加のコマンドなしでファイル名を渡して参照できるグローブ、文字列拡張などもあります。 UNIXファイルのアンカー/リンク動作をエミュレートするインライン方法はありますか?

「pathname」には、コマンドの置換と一種の独自の参照を含めることができますが、これはsed "1242p"パス名を扱うことなくファイル内のコマンドのみを処理します。そういえばリンクをしなくてただ行だけ抽出したんですね。ファイルの残りの部分を無視せずに特定の行にリンクする方法を理解することはできません。

GNUバッシュ、バージョン3.2.51

答え1

という名前のファイルを作成し、そのファイル+view +1242 fnameに対してまたはを呼び出すことができますviview

view '+view +1242 fname'

1242行の先頭にカーソルを置き、fnameカーソルを置きます(ここで/が実装されていると仮定します)。viewvimviview

または、次の操作を行います。

ln -s / '+view +1242 '

だからあなたも:

view '+view +1242 /etc/passwd'

1242行目を見てください/etc/passwd

または:

touch '+exe "view +1242 \57etc\57passwd"'

それはview

view '+exe "view +1242 \57etc\57passwd"'

ターゲットファイルの一番上の行を作成することもできます。

#! /usr/bin/less +1242

実行可能にして()、1242行目で開くように実行しますchmod +x fnameless

答え2

実際にファイルの一部をリンクする方法はありません。リンクは、特定の名前のファイルにのみアクセスできるようにし、ファイルの内容には何もしないファイルレベルのツールです。

ファイルから読みたい場合は、次のものを使用できます。名前付きパイプ:

mkfifo fname_line1242
while true; do sed -n '1242 { p; q; }' /path/to/fname >fname_line1242; done

そしてそれを読んでいる人は誰でも見ることができます...運が良ければfname_line12421242行目を見てください。/path/to/fname名前付きパイプには同期がないため、一度にリーダーが1つしかない場合にのみ安定して動作します。

この機能を複数の読者に適用するには、以下を使用してください。ソケットそして走るsocatソケットを読み込むたびにコンテンツを生成するコマンドを実行します。

socat -U UNIX-LISTEN:fname_line1242,unlink-early,fork EXEC:'sed -n -e 1242{ -e p -e q -e } /path/to/fname'

ファイルに内容を書き込んで行を置き換えたい場合は、/path/to/fname可能ですが、はるかに難しいです。あなたはそれを使用することができますヒューズファイルを開く、読み取り、書き込みなどで作成したコードが実行されるカスタムファイルシステムを作成します。誰かが必要な作業を実行するファイルシステムをすでに作成していない限り、これには大きな努力が必要です。

答え3

次のようにローカルファイルのURIを作成できます。

file:///home/user/filename

その後、#Part3ガイドを挿入できます。

file:///home/user/filename#Part3

htmlただし、ブラウザを使用してファイルを読み取るには、そのファイルが必要です。


実際の質問は次のようになります。どのプログラム(ツール)がこのファイルを読み取るか表示しますか?

ブラウザが回答を読むことができるようにするには、回答を上記に示します。

(マンページの一般的なリーダー)では、less次の内容を使用して特定の行に直接移動できます。

less +20 filename

コンソールの20行目から始まるテキストファイルを読みます。

必要な行番号を含むようにファイル名を変更できる場合。
次のようなもの: filename-line-233、これはうまくいきます:

$ filename=A-text-file-line-233
$ less +"${filename##*-}" "$filename"

このアイデアに対応できる他のツールがあるかもしれません。

答え4

Markdownを使用すると、ファイルの行を参照できるようです。

旗ハブリンク

関連情報