Обратите внимание, что это загорится, если какое-либо из имен файлов содержит ,
или /
в них:
$ awk -F "[/,]" -v OFS="," 'BEGIN { print "LB", "-PROJ--", "FILENAME----", "USER--", "DATA-----", "TIME---", "STATUS" }NR!=1{print $4,$5,$7,$8,$9"/"$10"/"$11,$12,$13}' input
LB,-PROJ--,FILENAME----,USER--,DATA-----,TIME---,STATUS
app,app_pit,HUB_TEST.apx,uJones,4/24/2018,5:55:58,OK
app,app_pit,test_acqit1.apx,uSmith,3/8/2018,10:16:41,OK
app,app_pit,test_bkfs.apx,uHarry,/26/2018,9:47:03,OK
Проверено с помощью команды sed, все работает нормально
команда:
sed -r "s/^\s+//g" filename| sed '/^\/\*.*\*\/$/d'
выход:
printf("It is /* Comment 2 */\n");
x = 5; /* Comment 3 */
/* Comment 5 */ y = 0;
/*
* Comment 6
*/
// Comment 7
Этот sed
переносной:
sed '\_^[[:blank:]]*/\*.*\*/[[:blank:]]*$_d' file.c
Все строки, которые начинаются(^
)с нуля или более пробелов ([[:blank:]]*
), начинают комментарий (/\*
), имеют что-либо еще, (.*
), закрывают комментарий(\*/
)и не содержат ничего, кроме пробелов в остальной части строки. строка([[:blank:]]*
)будет d
удалена. Конечно, вы также можете сделать это с помощью grep -v
.
Имейте в виду, что это также приведет к удалению таких строк, как
/* between two comments */ x = 0; /* could be some code */
Это то же самое, что ответ Филиппа , за исключением
|
(мое личное предпочтение ). [[:blank:]]
используется [[:space:]]
. [[:space:]]
включает такие не-графические символы, как вертикальная табуляция, перевод страницы и возврат каретки (в дополнение к пробелу и табуляции ); поскольку C рассматривает все эти пробельные символы как пробелы, [[:space:]]
действительно лучший класс символов для использования для обработки кода C. И sed '\|^[[:space:]]*/\*.*\*/[[:space:]]*$| { \|\*/.*[^[:space:]]|!d }'
Как и в ответе Филиппоса, он проверяет если первая не-пустая вещь в строке /*
и последнее не-пустое значение в строке — */
. Если это правда, у нас есть возможный полный -строковый комментарий; кандидат на удаление. В этом случае введите {
… }
. и найдите */
, за которым следует что-то не пустое -; т. е. */
, это не последняя не -пустая вещь в строке. Если мы это найдем, тогда мы знаем, что нашли конец первого комментария, и что на линии есть что-то еще. В таком случае ничего не делайте. Если мыне найдем*/
внутри линии, затем удалите строку.
Это должно выйти за рамки вопроса code
, заключенного в квадратные скобки между комментариями
sed -E '/^\s*\/\*/!bx ; /\*\/\s*$/!bx ; /\*\/\s*\S+.*\/\*/bx ; d; :x' draft
Если строка не начинается с маркера комментария, начинающегося только с пробела, тогда она начинается с кода, поэтому b
ранжируется после удаления d
доx
/^\s*\/\*/!bx
Если строка, начинающаяся с комментария, не заканчивается комментарием, за которым следует только пробел, то в конце есть код, поэтому b
ранжируется после удаления d
доx
/\*\/\s*$/!bx
Эти первые два теста могут быть объединены как
/^\s*\/\*.*\*\/\s*$/!bx
Если строка комментария содержит закрывающий маркер комментария, за которым следует хотя бы один символ пробела, отличный от -, а затем начинается еще один комментарий, то внутри есть код, поэтому b
ранжируется после d
elete доx
/\*\/\s*\S+.*\/\*/bx
Поскольку мы не нашли действительного кода, удалите
d
В противном случае закончить ничего не делая
x
Проверено на
/* Comment 1 */
printf("It is /* Comment 2 */\n");
x = 5; /* Comment 3 */
/* Comment 4 */
/* Comment 5 */ y = 0;
/*
* Comment 6
*/
// Comment 7
/* between two comments */ x = 0; /*some code */
Выход
printf("It is /* Comment 2 */\n");
x = 5; /* Comment 3 */
/* Comment 5 */ y = 0;
/*
* Comment 6
*/
// Comment 7
/* between two comments */ x = 0; /*some code */