0

すべてのコメントを削除する方法またはファイル内の指定された行を削除する方法は知っていますが、作成者、著作権などを保持する最初のコメント行のみを削除する方法がわかりません。ソース ファイルが存在する可能性があるため、最初の行を削除するだけでは使用できません。トップコメントブロックをまったく含まない。なにか提案を?

UPDATE : ソース ファイルは Objective-C ファイルであり、先頭のコメント行はすべて//. おそらく、「最初の非コメント行が見つかるまですべてのコメント行を削除してから停止する」というルールが、私が達成したいことを最もよく説明しています。

2 番目の質問:また、すべてのプロジェクト ディレクトリとファイルを再帰的にループするように sed に指示する方法を探しています。

UPDATE2。これは、変更しようとしている Objective-C ファイルのコメント ブロックの例です。

//
//  MyProjectAppDelegate.m
//  MyProject
//
//  Created by Name Surname on 2011-09-20.
//  Copyright 2012 JSC MyCompany. All rights reserved.
//
4

3 に答える 3

2

awk も受け入れられる場合は、次を参照してください。

 awk 'BEGIN{f=1}f&&/^\/\//{next;}{f=0}1' yourFile

テスト

kent$  cat test.txt
//
//  MyProjectAppDelegate.m
//  MyProject
//
//  Created by Name Surname on 2011-09-20.
//  Copyright 2012 JSC MyCompany. All rights reserved.
//
real codes come here...

// comments in codes should be kept

foo bar foo bar


kent$  awk 'BEGIN{f=1}f&&/^\/\//{next;}{f=0}1' test.txt
real codes come here...

// comments in codes should be kept

foo bar foo bar

find と awk ワンライナーを組み合わせて、再帰的な処理を行うことができます。

まあ、sedも同じ考えでそれを行うことができます。ホールドスペースにマークを書き、行ごとにホールドスペースを確認する必要があります。-i オプションを使用すると、元のファイルを変更できるという利点があります。ただし、仕事をするのは awk の方が簡単だと思います。また、変更したテキストを元のファイルに保存することも難しいことではありません。

于 2012-09-19T09:59:07.987 に答える
1

Kent'sで動作するsedソリューションは次のとおりです。 test.txt

sed -n '/^ *\/\//! { :a;p;N;s/.*\n//;ba}'

出力:

real codes come here...

// comments in codes should be kept

foo bar foo bar

説明

sed -n '/^ *\/\//!{    # if line does not start with //
  :a                   # label a
  p                    # print line
  N                    # append next line to PS
  s/.*\n//             # remove previous line
  ba                   # branch to a
}' < test.txt
于 2012-09-19T10:50:03.607 に答える
1

それを試してみてください:

sed '0,\#^\([^/]\|/[^/]\)\|^$# d'
于 2012-09-19T11:23:47.373 に答える