我有一些文件,如果它是文件中的最后一个字符,我想删除最后一个换行符. od -c告诉我,我运行的命令确实用一个尾随的新行写了一个文件:
0013600 n t > \n
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些与sed的技巧,但我能想到的最好的不是诀窍:
sed -e '$s/\(.*\)\n$/\1/' abc
Run Code Online (Sandbox Code Playgroud)
任何想法如何做到这一点?
我倾向于编写大量的文档,因此MediaWiki格式对我来说很容易理解,而且比编写传统HTML节省了我很多时间.然而,我也写了一篇博客,发现从键盘切换到鼠标一直为HTML输入正确的标签会增加很多时间.我希望能够用Mediawiki语法编写我的文章,然后将其转换为HTML以便在我的博客上使用.
我已经尝试了谷歌,但必须要求更好的术语,因为我无法找到任何东西.
我使用Linux,并希望从命令行执行此操作.
任何人有任何想法或想法?
我有一个文件在文件中有一行如下:
check=('78905905f5a4ed82160c327f3fd34cba')
Run Code Online (Sandbox Code Playgroud)
我希望能够移动此行以遵循如下所示的行:
files=('somefile.txt')
Run Code Online (Sandbox Code Playgroud)
该阵列虽然有时可以跨越多行,例如:
files=('somefile.txt'
'file2.png'
'another.txt'
'andanother...')
text
in between
check=('78905905f5a4ed82160c327f3fd34cba'
'5277a9164001a4276837b59dade26af2'
'3f8b60b6fbb993c18442b62ea661aa6b')
Run Code Online (Sandbox Code Playgroud)
数组/行总是以a)结尾,其间没有文本将包含一个闭括号.
我得到一些建议,awk可以做到这一点:
awk '/files/{
f=0
print $0
for(i=1;i<=d;i++){ print a[i] }
g=0
delete a # remove array after found
next
}
/check/{ f=1; g=1 }
f{ a[++d]=$0 }
!g' file
Run Code Online (Sandbox Code Playgroud)
这只会跨越一条线.我被告知要扩大搜索范围:
awk '/source/ && /\)$/{
f=0
print $0
for(i=1;i<=d;i++){ print a[i] }
g=0
delete a # remove array after found
next
}
/md5sum/ && /\)$/{ f=1; g=1 }
f{ a[++d]=$0 }
!g'
Run Code Online (Sandbox Code Playgroud)
刚学习awk所以我很感激你的帮助.或者,如果有其他工具可以做到这一点,我想听听它.有人告诉我'ed'这些类型的功能.
哇,这个真的有我.我想在这里需要一些棘手的sed技能.这是我试图替换的命令文本的输出值:
...
fast
n : abstaining from food
Run Code Online (Sandbox Code Playgroud)
我想要替换它的价值是:
...
Noun
: abstaining from food
Run Code Online (Sandbox Code Playgroud)
事实证明这是我认为的诡计.因为'fast'被列出了很多次,因为它列在行的开头的其他地方.所以我想出了这个来定义范围:
sed '/fast/,/^ n : / s/fast/Noun/'
Run Code Online (Sandbox Code Playgroud)
我认为会这样做,但是......不幸的是,这并没有结束替换,这场比赛后的其余输出被Noun取代.比赛结束后如何让sed停止更换?更好的是,我可以找到两行模式匹配并替换它吗?
我想改变一个数组的值,并希望得到任何帮助.
我有一个像这样的数组:
users=(root isometric akau)
Run Code Online (Sandbox Code Playgroud)
(这实际上是当前用户的列表)我希望能够测试用户是否存在以及他们是否存在,然后从数组中删除该人.我已经尝试过将它放在for循环中并进行评估:
for i in ${users[@]}; do
eval "users=($([ -z $(grep \"^\$i\" /etc/shadow) ] && sed \"s/\$i//g\"))"
done
echo $users
Run Code Online (Sandbox Code Playgroud)
我想再玩这个,但我想我可能会变得太复杂(我不确定我可以把命令放在一个数组中).任何人都知道如何做到这一点?
编辑:
我如何输入数组变量未设置数:
cnt=0
for i in ${users[@]}; do
[ -z "$(grep "^$i" /etc/shadow)" ] && unset users[cnt] || ((cnt++))
done
Run Code Online (Sandbox Code Playgroud)
EDIT2:
实际上丹尼斯的表现更好.